在arm架构中,状态寄存器又称程序状态寄存器(PSR),它主要用来存储CPU当前的一些状态信息,如处理器模式、中断开关、条件码等。状态寄存器一般是32位的,位数越多则表达能力就越强。
整个状态寄存器被分成三个部分,分别是CPSR、SPSR和APSR。
CPSR(Current Program Status Register)是最常用的状态寄存器,它的作用是保存当前程序的相关状态信息。
CPSR寄存器主要有5个位,分别是N(Negative)、Z(Zero)、C(Carry)、V(Overflow)和Q(Cumulate)。其中N位用于表示运算结果是否是负数,Z位用于表示运算结果是否为0,C位用于表示运算过程中的进位标志,V位用于表示运算结果是否溢出,Q位用于保存累加器的值。通过对这几个位的操作,可以控制程序的运行逻辑,实现条件分支等操作。
SPSR(Saved Program Status Register)用于保存在异常发生时的程序状态信息,这个寄存器只有在程序被中断时才会被使用。
SPSR和CPSR的五个位是相同的,但SPSR用来保存的是在中断之前程序的状态信息,所以在返回时需要将SPSR中的值恢复到CPSR中。
APSR(Application Program Status Register)是一种轻量级的状态寄存器,它只有32位中的4位,分别是NZCV。
这四位的含义和CPSR中的N、Z、C、V是一样的,分别表示运算结果是否为0、是否为负数、是否有进位和是否溢出。APSR可以用于一些对速度和存储空间要求较高的场合,如嵌入式系统中常用的Cortex-M系列处理器。