ARM - CMP
CMP(compare)
语法:CMP{cond} Rn, Operand2
cond
是一个可选的条件代码Rn
是存放第一个操作数的 ARM 寄存器Operand2
是一个灵活的第二操作数
第一个操作减去第二个操作数,但不会将结果存入任何寄存器中,它只会更新 FLAG 的 CF,ZF,OF,AF,PF 标志。
执行指令后:
ZF=1 则说明两个数相等,因为zero为1说明结果为0
当无符号时:
CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1 < oprd2
**CF=0** 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1 > oprd2
当有符号时:
若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1 > oprd2
若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1 < oprd2
若**SF=0,OF=1** 则说明了此时的值为正数,有溢出,可以看出oprd1 < oprd2
若**SF=1,OF=1** 则说明了此时的值为负数,有溢出,可以看出oprd1 > oprd2
简单例子
C代码:
1 | int a = 10; |
对应arm汇编:
1 | MOV R1,#0xa ; R1(a) = 10 |
所以最后寄存器R1=0xb,R2=0x0