汇编指令的总体构成如下:
opcode{cond}{s} Rd, Rn, oprand2
其中{cond}
表示条件码, 代表指令opcode
在满足条件时才会执行
下表中就是所有可能的条件码。
使用条件码之前, 必须先执行cmp
等影响cpsr
状态寄存器的指令, 否则条件码无意义。
例如:
mov r0, #5 @ 给r0寄存器赋值
mov r1, #10 @ 给r1寄存器赋值
cmp r0, r1 @ 这里先对r0 和 r1进行比较, 对状态寄存器进行修改
addeq r1, r1, r0 @ 这里会在状态寄存器中查看是否有满足r0和r1相等的状态标志位
@ 如果有, 才执行相加的操作
后缀 | 含义 | 条件机器码 | cspr状态寄存器变化标志 |
---|---|---|---|
EQ | 相等 | 0000 | Z==1 |
NE | 不相等 | 0001 | Z=0 |
CS | 无符号大于或等于 | 0010 | C==1 |
CC | 无符号小于 | 0011 | C=0 |
MI | 负数 | 0100 | N==1 |
PL | 正数或零 | 0101 | N=0 |
VS | 溢出 | 0110 | V==1 |
VC | 未溢出 | 0111 | V=0 |
HI | 无符号大于 | 1000 | C==1 Z=0 |
LS | 无符号小于或等于 | 1001 | C=0 Z==1 |
GE | 带符号大于或等于 | 1010 | N==V |
LT | 带符号小于 | 1011 | N!=V |
GT | 带符号大于 | 1100 | Z=0 N==V |
LE | 带符号小于或等于 | 1101 | Z==1 N!=V |
AL | 无条件执行 | 1110 | 忽略 |