新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 数据处理指令之: CMP比较指令

数据处理指令之: CMP比较指令

作者:时间:2013-09-13来源:网络收藏

6.11 指令

1.指令的编码格式

(Compare)指令使用寄存器Rn的值减去operand2的值,根据操作的结果更新CPSR中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。

本文引用地址:http://www.eepw.com.cn/article/257066.htm

指令的编码格式如图6.12所示。

图6.12 指令编码格式

2.指令的语法格式

CMP{cond>} Rn>,shifter_operand>

① cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。

② Rn>

指定第一个源操作数寄存器。

③ shifter_operand>

详见TST指令。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

If ConditionPassed{cond} then

ALU_out = Rn - shifter_operand

N Flag = ALU_out[31]

Z Flag = if ALU_out==0 then 1 else 0

C Flag =NOT BorrowFrom{Rn-shifter_operand}

V Falg=OverflowFrom{Rn-shifter_operand}

4.指令举例

【例6.11】CMP指令举例。

CMP允许把一个寄存器的内容与另一个寄存器的内容或立即值进行,更改状态标志来允许进行条件执行。它进行一次减法,但不存储结果,而是正确地更改标志位。标志位表示的是操作数1与操作数2比较的结果(其可能为大、小、相等)。如果操作数1大于操作操作数2,则此后的有GT后缀的指令将可以执行。

显然,CMP不需要显式的指定S后缀来更改状态标志。

(1)下面的指令比较R1和立即数10并设置相关的标志位。

CMP R1,#10

(2)下面指令比较寄存器R1和R2中的值并设置相关的标志位。

CMP R1,R2

通过上面的例子可以看出,CMP指令与SUBS指令的区别在于CMP指令不保存运算结果,在进行两个数据大小判断时,常用CMP指令及相应的条件码来操作。



评论


相关推荐

技术专区

关闭