cmp:(compare)指令进行比较两个操作数的大小
格式: cmp oprd1,oprd2
比较oprd1和oprd2操作数,然后通过助记符来实现想要的判断。
teq: (test equal)测试相等,该指令通常用于比较操作数1和操作数2是否相等。
格式: teq oprd1,oprd2 TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。(EOR指令也是实现异或运算,只是不更新CPSR)
cmp和teq助记符如下
助记符 | 含 义 |
---|---|
EQ | 相等equal |
NE | 不相等not equal |
CS | 无符号数大于或等于Carry Set |
CC | 无符号数小于 |
MI | 负数minus |
PL | 正数或零plus |
VS | 溢出 |
VC | 没有溢出 |
HI | 无符号数大于high |
LS | 无符号数小于或等于less |
GE | 带符号数大于或等于 |
LT | 带符号数小于less than |
GT | 带符号数大于great than |
LE | 带符号数小于或等于 |
AL | 无条件执行all |
CMP R0, R1 ; R0与R1比较,做R0-R1的操作
ADDHI R0, R0, #1 ; 若R0 > R1, HI为真,则R0 = R0 1
ADDLS R1, R1, #1 ; 若R0 <= R1, LS为真,则R1 = R1 1
cmp使用实例实例2:
adr r0, _start ldr r1, _TEXT_BASE cmp r0, r1 r0与r1比较,做r0-r1的操作 blne cpu_init_crit 若ne(r0地址与r1地址不相等)为真,执行bl cpu_init_crit 跳转
teq使用实例实例1:
teq r0, r1 R0与R1是否相等 ADDeq R0, R0, #1 ; 若R0 == R1, eq为真,则R1 = R1 1