当前位置:网站首页>ARM指令CMP详解
ARM指令CMP详解
2022-07-19 17:16:00 【N阶魔方】
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 0011
_________________________________
(借位1) 1111 1111 1111 1111
所以,运算结果是 0FFFFH
根据这个结果,各标志位将会被分别设置成以下值:
CF=1,因为有借位
OF=0,未溢出
SF=1,结果是负数
ZF=0,结果不全是零
还有AF, PF等也会相应地被设置。
CMP 比较指令做了减法运算以后,根据运算结果设置了各个标志位。标志位设置过以后,0FFFFH这个减法运算的结果就没用了,它被丢弃,不保存。执行过了CMP指令以后,除了CF,ZF,OF, SF,等各个标志位变化外,其它的数据不变。
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 小于等于(有符号数)
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 0011
_________________________________
(借位1) 1111 1111 1111 1111
所以,运算结果是 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 小于等于(有符号数)
边栏推荐
猜你喜欢
随机推荐
2022年移动应用运营增长洞察白皮书:流量红利消退时代的“破局”之道
C语言-C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL” 及extern
【开源】MagicData-RAMC :180小时中文对话式语音数据集正式发布
LDR指令和LDR伪指令区别
WPF 密码框 密码可见切换
面试了一个37 岁的程序员 有一些感悟
2D动画的一个场景应用
js数组 =号赋值改变一个,引发原数组改变问题
案例----缓冲流与普通的输入流和输出流相比效率有多高?
基于STM32的CAN通讯测试:让地球仪转起来
Orthanc windows下扩展mysql
【CANN训练营】玩转CANN目标检测与识别一站式方案——学习笔记一(初体验)
arm汇编—str指令
WPF RadioButton style (2)
fedora tftp 配置及测试方法
jlink 烧写可执行bin程序到mini2440
冒泡排序代码实现
过过 适配器模式
STM32 IWDG设置
redis集群搭建(一主两从三哨兵)完整版带验证报告