规则:
- 当处理器工作在
ARM状态
时,几乎所有的指令均根据CPSR中条件码的状态
和指令的条件域
有条件的执行; - 当
指令的执行条件满足时,指令被执行
,否则指令被忽略;
条件码和条件助记符:
每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]
;- 共有16种条件码,每种条件码可用2个字符(简称:条件助记符)表示,这2个字符可以添加在指令助记符的后面和指令同时使用;
- 在16种条件码中,只有15种可以使用,如下表所示,第16种条件码(1111)为系统保留,暂时不能使用;
序号 | 条件码 <cond> |
条件助记符 |
CPSR中条件标志位cpsr_f的值 | 含义 |
---|---|---|---|---|
0 | 0000 | EQ | Z=1 | 相等 |
1 | 0001 | NE | Z=0 | 不相等 |
2 | 0010 | CS HS |
C=1 | 无符号数大于或等于 |
3 | 0011 | CC LO |
C=0 | 无符号数小于 |
4 | 0100 | MI | N=1 | 负数 |
5 | 0101 | PL | N=0 | 正数或零 |
6 | 0110 | VS | V=1 | 溢出 |
7 | 0111 | VC | V=0 | 未溢出 |
8 | 1000 | HI | C=1,Z=0 | 无符号数大于 |
9 | 1001 | LS | C=0,Z=1 | 无符号数小于或等于 |
10 | 1010 | GE | N=V | 带符号数大于或等于 |
11 | 1011 | LT | N!=V | 带符号数小于 |
12 | 1100 | GT | Z=0,N=V | 带符号数大于 |
13 | 1101 | LE | Z=1,N!=V | 带符号数小于或等于 |
14 | 1110 | AL | 任何 | 忽略条件,即无条件执行 |
15 | 1111 | 任何 | 系统保留 |
SofTool.CN Notes:
上面的条件助记符用的大写形式,但是在程序中,我们经常见到的是其小写形式。
举例:
BEQ
B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位(Z=1)时发生跳转。