8.ARM寄存器详细解说
ARM寄存器的简单分类:图1-1:
图1-1
ARM微处理器中共有37个32位寄存器,其中31个通用寄存器,6个状态寄存器。但是这些寄存器不能被同时访问,在七种模式中,可以访问的寄存器种类不同。但是,通用寄存器R14——R0、程序计数器PC、一个状态寄存器cpsr都是可以被访问的。
具体的情况如下图1-2所示:
图1-2
寄存器分类:
1、不分组通用寄存器:
R0-R7是不分组寄存器。所谓不分组就是在七种模式下的任意一种模式都访问同一个物理寄存器地址。就是不分组寄存器没有特权模式,任意一种模式都可以使用未分组寄存器。
2.分组寄存器R8——R12:
FIQ模式分组寄存器R8——R12.
FIQ以外的分组寄存器R8-----R12
3.分组寄存器R13、R14:
寄存器R13通常用做堆栈指针SP。
寄存器R14用做子程序链接寄存器(Link Register LR),也称为LR,指向函数的返回地址。
4.程序计数器:
寄存器R15被用做程序计数器,也称为PC。其值等于当前执行的指令的地址+8(因为在取址和执行之间多了一个译码的阶段)。PC总是指向正在运行的后两条指令地址,即是当前执行指令的地址+8.
5.状态寄存器:
图1-3:
图1-3
ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件标志位、中断控制位、当前处理器模式以及其他状态和控制信息。CPSR在每种异常模式下都有一个对应的物理寄存器----程序状态保存寄存器SPSR。当异常发生的时候,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。
CPSR状态寄存器的示意图:图1-4:
图1-4
图1-5:
图1-5
ARM框架文档
31个通用寄存器,6个状态寄存器(一个cpsr,5个spsr)。
通用31个寄存器,被分为了三类:R0~R7,R8~R14,PC程序计数器(R15)。
R13常做堆栈指针的。
R14保存调用子函数的返回地址,和中断的返回地址。
用于程序计数器,pc指针。
cpsr:
解释: