ARM指令CMP详解
1、加减指令
add r1, r2, #1 /*r1 = r2 + 1 */
sub r1, r2, #1 /*r1 = r2 - 1 */
2、adr指令
adr是⼩范围的地址读取伪指令,ldr是⼤范围的读取地址伪指令。可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,⽽ldr ⽤于加载32为⽴即数或⼀个地址到指定的寄存器中。到这⼉就会看到其中的区别了。如果在程序中想加载某个函数或者某个在联接时候指定的地址时请使⽤adr,例如在lds中需要重新定位的地址。当加载32为的⽴即数或外部地址时请⽤ldr。
3、CMP
假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。
执⾏的指令是:CMP AX, BX
执⾏这条指令时,先做⽤AX中的数减去BX中的数的减法运算。
列出⼆进制运算式⼦:
0000 0000 0000 0010
- 0000 0000 0000 0011
_________________________________
(借位1) 1111 1111 1111 1111
比较指令cmp怎么用所以,运算结果是 0FFFFH
根据这个结果,各标志位将会被分别设置成以下值:
CF=1,因为有借位
OF=0,未溢出
SF=1,结果是负数
ZF=0,结果不全是零
还有AF, PF等也会相应地被设置。
CMP ⽐较指令做了减法运算以后,根据运算结果设置了各个标志位。标志位设置过以后,0FFFFH这个减法运算的结果就没⽤了,它被丢弃,不保存。执⾏过了CMP指令以后,除了CF,ZF,OF, SF,等各个标志位变化外,其它的数据不变。
对照普通的减法指令 SUB AX, BX,它们的区别就在于:
SUB指令执⾏过以后,原来AX中的被减数丢了,被换成了减法的结果。
CMP指令执⾏过以后,被减数、减数都保持原样不变。
cmp r0, #0
beq LABEL1 ; r0==0那么向前跳转到LABEL1处执⾏
bne LABEL2 ; 否则向后跳转到LABEL2处执⾏
4、控制流指令
转移指令(branch)
说明:⽆条件转移B,BAL
举例: B LABEL ; LABEL为某个位置
条件转移
说明:
BEQ 相等
BNE 不等
BPL ⾮负
BMI 负
BCC ⽆进位
BCS 有进位
BLO ⼩于(⽆符号数)
BHS ⼤于等于(⽆符号数)
BHI ⼤于(⽆符号数)
BLS ⼩于等于(⽆符号数) BVC ⽆溢出(有符号数) BVS 有溢出(有符号数) BGT ⼤于(有符号数)
BGE ⼤于等于(有符号数) BLT ⼩于(有符号数)
BLE ⼩于等于(有符号数)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论