ARM微处理器第二弹:寄存器

时间:2021-09-15 18:33:35

ARM微处理器共有37个32位寄存器,其中31个通用寄存器,6个为状态寄存器。这些寄存器是不能被同时访问的,具体那些可以被访问,取决于ARM处理器的工作状态及具体的运行模式。但是在任何时候,通用寄存器R14-R0、程序计数器PC、一个状态寄存器都是可以被访问的。

寄存器(ARM状态下):在ARM状态下,任一时刻可以访问16个通用寄存器和一到两个状态寄存器。非用户模式(特权模式)下,可以访问特定模式分组寄存器,具体见下图:

ARM微处理器第二弹:寄存器

寄存器(Thumb状态):Thumb状态下的寄存器集是ARM状态下的一个子集,程序可以直接访问8个通用寄存器(R7-R0)、程序计数器(PC)、堆栈指针(SP)、连接寄存器(LR)和CPSR。具体见下图:

ARM微处理器第二弹:寄存器

寄存器对应:

Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系:

1)Thumb状态下和ARM状态下的R0-R7是相同的,CPSR和SPSR是相同的;

2)Thumb状态下的SP对应于ARM状态下的R13;

3)Thumb状态下的LR对应于ARM状态下的R14;

4)Thumb状态下的程序计数器PC对应于ARM状态下的R15。如下图所示:

ARM微处理器第二弹:寄存器

通用寄存器有:R0-R15、R13_svc、R14_svc、R13_abt、R14_abt、R13_und、R14_und、R13_irq、R14_irq、R8_fiq-R14_fiq

不分组通用寄存器(R0-R7):在所有的处理器模式下,访问的都是统一物理寄存器。未分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。

分组通用寄存器(R8-R14):其中R8-R12可以作为FIQ模式分组寄存器,也可为FIQ以外的分组寄存器;R13通常用作堆栈指针SP、R14用作子程序的链接寄存器

程序计数器PC(R15):其值等于当前正在执行的指令的地址+8(因为在取址和执行之间多了一个译码阶段)。


状态寄存器:ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、、中断禁止位、当前处理器模式以及其他状态和控制信息。CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR 用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。

ARM微处理器第二弹:寄存器           ARM微处理器第二弹:寄存器