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

来源:互联网 发布:淘宝国产高仿手办 编辑:程序博客网 时间:2024/06/06 00:58

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




原创粉丝点击