1.16.ARM汇编指令4之比较指令
2017-08-04 19:23
357 查看
ARM比较指令:CMP & CMN & TST & TEQ
* CMP
比较指令,指令使用Rn的值减去operand2的值,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断是否执行。
指令格式:
CMP{cond} Rn,operand2
eg:
CMP r1,#10 ; r1与10比较,设置相关标志位
CMP r1,r2 ; r1与r2比较,设置相关标志位
注:CMP指令和SUBS指令的区别在于CMP指令不保存运算结果,在进行俩个数据大小判断时,常用CMP指令及相应的条件码来操作。
* CMN
负数比较指令,指令使用Rn的值加上operand2的值,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断是否执行。
指令格式:
CMN{cond} Rn,operand2
eg:
CMN r0,#1 ; r0+1 判断r0是否为1的补码,若是,则cpsr寄存器的Z置位
注:CMN指令与ADDS指令的区别在于CMN指令不保存运算结果,CMN指令可以用于负数比较,比如CMN r0,#1 指令表示r0与-1进行比较,若r0=-1(即1的补码),则Z置位,否则Z复位。
* TST
位测试指令,指令将寄存器Rn的值与operand2按位进行逻辑与操作,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断是否执行。
指令格式:
TST{cond} Rn,operand2
eg:
TST r0,#0x01 ; 判断r0的最低位是否为0
TST r1,#0x0f ; 判断r1的低4位是否全为0
注:指令TST和ANDS的指令区别在于TST指令不保存运算结果,TST指令通常与EQ,NE条件码配合使用,当所有测试位都为0时,EQ有效,而只要有一个测试位不为0,则NE有效。
* TEQ
相等测试指令,指令将Rn与operand2的值按位进行异或操作,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断指令是否执行。
指令格式:
TEQ{cond} Rn,operand2
eg:
TEQ r0,r1 ; 比较r0与r1是否相等(不影响C位和V位)
注:指令TEQ和EORS的指令区别在于TEQ指令不保存运算结果,使用TEQ进行相等测试,常于EQ、NE条件码配合使用,当俩个数据相等时,EQ有效,否则NE有效。
* CMP
比较指令,指令使用Rn的值减去operand2的值,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断是否执行。
指令格式:
CMP{cond} Rn,operand2
eg:
CMP r1,#10 ; r1与10比较,设置相关标志位
CMP r1,r2 ; r1与r2比较,设置相关标志位
注:CMP指令和SUBS指令的区别在于CMP指令不保存运算结果,在进行俩个数据大小判断时,常用CMP指令及相应的条件码来操作。
* CMN
负数比较指令,指令使用Rn的值加上operand2的值,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断是否执行。
指令格式:
CMN{cond} Rn,operand2
eg:
CMN r0,#1 ; r0+1 判断r0是否为1的补码,若是,则cpsr寄存器的Z置位
注:CMN指令与ADDS指令的区别在于CMN指令不保存运算结果,CMN指令可以用于负数比较,比如CMN r0,#1 指令表示r0与-1进行比较,若r0=-1(即1的补码),则Z置位,否则Z复位。
* TST
位测试指令,指令将寄存器Rn的值与operand2按位进行逻辑与操作,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断是否执行。
指令格式:
TST{cond} Rn,operand2
eg:
TST r0,#0x01 ; 判断r0的最低位是否为0
TST r1,#0x0f ; 判断r1的低4位是否全为0
注:指令TST和ANDS的指令区别在于TST指令不保存运算结果,TST指令通常与EQ,NE条件码配合使用,当所有测试位都为0时,EQ有效,而只要有一个测试位不为0,则NE有效。
* TEQ
相等测试指令,指令将Rn与operand2的值按位进行异或操作,根据操作的结果更新CPSR寄存器相应的条件标志位,以便后面的指令根据相应的条件标志位来判断指令是否执行。
指令格式:
TEQ{cond} Rn,operand2
eg:
TEQ r0,r1 ; 比较r0与r1是否相等(不影响C位和V位)
注:指令TEQ和EORS的指令区别在于TEQ指令不保存运算结果,使用TEQ进行相等测试,常于EQ、NE条件码配合使用,当俩个数据相等时,EQ有效,否则NE有效。
相关文章推荐
- Docker镜像以及CMD与ENTRYPOINT指令的比较
- 通过cmp 指令执行后,相关标志位的值就可以看出比较的结果
- ARM 条件码 分支指令 比较指令 程序状态寄存器(CPSR)
- linux_command_比较指令comm、diff
- 比较、跳转指令
- 汇编中将字节比较转变为字比较从而减少指令
- include 指令与 include动作的区别和比较
- 8086cpu中的标志寄存器与比较指令
- AVX指令集中的32种浮点比较关系详解(NaN、无序、有序等)
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
- ARM 指令集 比较指令
- 比较跳转指令
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
- 汇编cmp比较指令详解
- Linux文本比较指令(diff,cmp)详解
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
- AVX指令集中的32种浮点比较关系详解(NaN、无序、有序等)
- using声明 和 using编译指令 比较
- 汇编cmp比较指令详解
- Linux文本比较指令(diff,cmp)详解