1.16.ARM汇编指令4之比较指令

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有效。




  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值