cmp - ShenYj/ShenYj.github.io GitHub Wiki
CMP
指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新 CPSR
中条件标志位的值。
该指令进行一次减法运算,但不存储结果,只更改条件标志位。
标志位表示的是操作数1与操作数2的关系(大、小、相等)
- 例如, 当操作数1大于操作操作数2, 则此后的有GT后缀的指令将可以执行。
格式:CMP{条件} 操作数1,操作数2
-
示例:
CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减,并根据 结果设置CPSR的标志位 CMP R1,#100 ;将寄存器R1的值与立即数100相减,并根 据结果设置CPSR的标志位
-
补充
-
CMP
指令一般搭配B
、BL
指令使用-
B
: 无条件跳转,一般是什么函数内部的if、switch条件判断 -
BL
: 带函数返回值的跳转,一般是调用其他的函数
-
-
区别于
SUB
指令-
SUB
指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中- 格式:
SUB{条件}{S} 目的寄存器, 操作数1, 操作数2
- 格式:
-
CMP
其实从格式参数上也能明显观察到区别,CMP
指令也会将操作数1减去操作数2,并将结果存放到CPSR
寄存器中(程序状态寄存器
)- 格式:
CMP{条件} 操作数1,操作数2
- 笔记: cpsr&指令的条件域
- 格式:
-
-