当前程序状态寄存器CPSR可以在任何位处理器模式下被访问,它包含条件码标志、中断控制、当前处理器模式以及其他状态和控制信息。CPSR的结构图如下:
一、条件标志位
CPSR最高4位:N(Negative)、Z(Zero)、C(Carry)和V(oVerflow)称为条件标志位。程序名中的算术或逻辑指令可以根据其执行结果修改这些条件标志位,之后的条件执行指令可以根据这些条件标志决定相应的指令是否被执行。各条件标志位的具体含义如下:
1、N(符号位)
该位设置为当前指令运行结果的BIT[31]的值。当两个由补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示结果为正数或零。
2、Z(零标志位)
如果指令的运算结果为0,则Z=1(通常用来表示比较的结果为“相等”);否则Z=0.
3、C(进、借位标志)
表示运算是否有进位、借位等。下面分4种情况讨论C的设置方法。
3.1、在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0.
3.2、B、在减法指令中(包括比较指令CMP),当运算中发生错位(即无符号数运算发生下溢出),则C=0;其他情况下C=1
3.3、对于在操作数中包含移位操作的运算指令(非加/减法指令),C被设置成被移位寄存器最后移出去的位。
3.4、对于其他非加/减法运算指令,C的值通常不受影响
4、V(溢出标志位)
4.1、对于加/减运算指令,当操作数和运算结果都是以二进制的补码表示的带符号的数时,V=1表示符号位溢出
4.2、对于非加/减法指令,通常不改变标志位V的值
二、标志位
在带DSP指令扩展的ARM
v5E及更高版本中,CPSR[27]用于指示增强的DSP指令是否发生了溢出或饱和。
三、中断控制位
I=1时,IRQ(中断模式)被禁止;I=0时,IRQ中断生效
F=1时,FIQ(快速中断模式)被禁止;F=0时,FIQ中断生效
四、状态控制位
T位是处理器的状态控制位,主要用于ARM体系带T的版本,在非T系列的ARM版本中,T位将始终为0.当T=0时,处理器处于ARM状态(即正在执行32位的ARM指令),当处理器处于Thumb状态(即正在执行16位的Thumb指令)
不能通过直接修改CPSR的T位来改变处理器的状态,因为直接修改CPSR的T结果不可预知,必须通过状态切换指令BX、BLX指令来修改T位。
五、模式控制位
M[4:0]为模式控制位,这些为的组合确定了处理器处于哪种状态。下表给出了各个模式对应的M值: