一、Cortex内部寄存器的作用:
程序状态寄存器xPSR
在arm7时代的程序状态寄存器是这样的。将整个寄存器划分为4个域,[31-24]是标志域,用于判断计算是否溢出进位为0等。[23-16]是状态域没有使用,[15-8]是扩展域没有使用,[7-0]是控制域用于控制中断的模式。
31 30 29 28 27 26-25 24 23 16 15-8 7 6 5 4-0
N Z C V Q unused J unused unused I F T MODE
cortex的程序状态寄存器xpsr,将整个寄存器分为三个子状态寄存器(部分位没有使用):
应用程序 PSR(APSR)—对应cpsr标志域[31-27],(由8位减到5位)
执行 PSR(EPSR)—对应cpsr没有使用的状态域和扩展域
中断号 PSR(IPSR)—对应cpsr的控制域[8-0](增加了1位)
31 30 29 28 27 26-25 24 23 -16 15-10 9 8-0
N Z C V Q ICI/IT T unused ICI/IT 中断号
APSR
N:表示两个有符号整数运算时,N==1表示运算结果为负数,N=0表示运算结果为正数或者零。
Z:Z=1表示运算结果为0,Z=0表示运算结果不为0
C:无符号加法运算产生进位,则C=1,无符号减法运算产生溢出,则C=0;
V:有符号加减运算产生溢出,则V=1;
Q:饱和条件码标志位
IPSR
在arm7中,是通过一个特定的数来表示某个模式,而cortex中,只有两个模式,所以当IPSR等于0时候,处于线程模式时,在手柄模式下,为当前异常的异常号。
EPSR
用来说明是arm指令还是thumb指令,其实也就是控制域的[5]位
T:Thumb状态, T=1,ARM状态,T=0;
通用状态寄存器
由R0到R12寄存器构成,其中R0到R7是低组寄存器。所有指令都能访问它们,复位后的初始值是不可预料的。R8-R12 被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, thumb-2 指令则不受限制。复位后的初始值也是不可预料的。
中间结果保存寄存器