2024年5月1日发(作者:)

3.2.1 寄存器概述

ARM微处理器有37个32位长的寄存器,其中包括30个通用寄存器,6个状态寄存器和一

个程序计数器寄存器(PC)。

如图3.2所示,ARM微处理器中将这37个寄存器分成不同的组,在ARM微处理器的每种

工作模式下只能使用其中一组寄存器。我们知道,ARM微处理器共有7种模式,其中用户模式

和系统模式拥有物理空间上完全相同的寄存器,而其它5种异常模式都有一些自己独立的寄存器。

从图上可以看出,在用户和系统模式下可以使用R0-R15和CPSR共17个寄存器;在FIQ模式

下可以使用R0-R15,CPSR,CPSR共18个寄存器,其中R8-R14以及SPSR寄存器是FIQ模

式专有寄存器,其它寄存器和用户模式共用相同的物理寄存器;在IRQ、SVC、Undef、Abort

模式下可以使用的寄存器都是18个(R0-R15,CPSR,SPSR),其中R13,R14,CPSR是各个

模式专有的,其它和用户模式共用相同的物理寄存器。

可见,ARM内核中一共有37个物理上独立的寄存器,在每一种处理器模式中只能访问一组

相应的寄存器。在每组寄存器中:

R13通常用作栈指针寄存器(SP),每一种模式有自己的R13,所以允许每一种异常都有自

己的栈指针。

R14用作连接或返回地址寄存器(LR),每一种模式有自己的 R14。

R15用作程序计数器(PC),用来保存读取指令的地址。

CPSR (Current Program Status Register) 存储ARM微处理器当前的状态和模式标志。

SPSR (Saved Program Status Register)异常模式下的CPSR的备份寄存器,当一个异常发

生时保存当前的CPSR值。结合连接寄存器可使处理器返回先前的状态。

ARM微处理器这样组织寄存器的好处在于当各种异常发生的时候,每种异常模式都可以保

存一些重要的数据,使异常处理程序完成之后返回异常前的程序时不会破坏原有的寄存器或状态。

3.2.2 通用寄存器

通用寄存器包括:未分组寄存器(R0-R7)、分组寄存器(R8-R14)、程序计数器PC(R15)。

(1)未分组寄存器(R0-R7)

在ARM微处理器中寄存器R0-R7是未分组的,在图3.2中我们也看到,R0-R7在物理上只