一、概述
APSR(应用程序状态寄存器) 存放算术逻辑单元 (ALU) 状态标记的副本。 这些标记用于确定是否执行条件指令。
在CPSR(当前程序状态寄存器)存放以下内容:
- APSR 标记
- 当前处理器模式
- 中断禁用标记
- 当前处理器状态 (ARM、 Thumb、 ThumbEE 或 Jazelle)
- IT 块的执行状态位
其中的APSR标记在所有模式下都可以访问。
有些指令会更新所有标记,而有些指令仅更新部分标记。 如果某一标记未得到更新,则会保留其原始值。 每个指令的描述详细介绍了它对这些标记所产生的影响。
二、状态标记位
- N 当运算结果为负值时设置此标记。
- Z 当运算结果为零时设置此标记。
- C 当运算导致进位时设置此标记。
- V 当运算导致溢出时设置此标记。
出现以下情况时会发生进位:
• 如果加法的结果大于或等于 232
• 如果减法的结果为正值或零
• 是移动或逻辑指令中的内联滚筒式移位器运算的结果
如果加法、减法或比较的结果大于或等于 231 或小于 –231,则会发生溢出。
三、各条件码与状态标记的对应关系
code | 条件码 | 状态 | 描述 |
---|---|---|---|
0000 | EQ | Z=1 | 相等 |
0001 | NE | Z=0 | 不相等 |
0010 | CS,HS | C=1 | 无符号数大于或等于 |
0011 | CC,LO | C=0 | 无符号数小于 |
0100 | MI | N=1 | 负数 |
0101 | PL | N=0 | 正数或0 |
0110 | VS | V=1 | 溢出 |
0111 | VC | V=0 | 未溢出 |
1000 | HI | C=1,Z=0 | 无符号数大于 |
1001 | LS | C=0,Z=1 | 无符号数小于或等于 |
1010 | GE | N=V | 带符号数大于或等于 |
1011 | LT | N != V | 带符号数小于 |
1100 | GT | Z=0, N=V | 带符号数大于 |
1101 | LE | Z=1,N != V | 带符号数小于或等于 |
1110 | AL | 无 | 无条件执行 |
1111 | NV | 无 | 无条件不执行 |
HS - Higher or Same
LO - Lower