2.2.5. 寄存器

ARM 处理器拥有 37 个寄存器。 这些寄存器按部分重叠组方式加以排列。 每个处理器模式都有一个不同的寄存器组。 编组的寄存器为处理处理器异常和特权操作提供了快速的上下文切换。 有关如何对寄存器进行编组的详细描述,请参阅《ARM 体系结构参考手册》

提供了下列寄存器:

三十个 32 位通用寄存器

在任一时刻都存在十五个通用寄存器,即 r0、r1... r13、r14,具体取决于当前的处理器模式。

r13 是堆栈指针 (sp)。 C 和 C++ 编译器始终将 r13 用作堆栈指针。 在 Thumb-2 中,sp 被严格定义为堆栈指针,因此如果使用 r13,则在堆栈操作中用处不大的许多指令会产生不可预测的结果。 建议您不要将 sp 用作通用寄存器。

在用户模式下,r14 被用作链接寄存器 (lr),用于存储调用子例程时的返回地址。 如果返回地址存储在堆栈上,则也可将 r14 用作通用寄存器。

在异常处理模式下,r14 存放异常的返回地址;如果在一个异常内执行子例程调用,则 r14 存放子例程的返回地址。如果返回地址存储在堆栈上,则可将 r14 用作通用寄存器。

程序计数器 (pc)

程序计数器被当作 r15(或 pc)来加以访问。 它在 ARM 状态下以一个字(四字节)为增量,在 Thumb 状态下则按指令的大小执行。 跳转指令将目标地址加载到 pc 中。 您也可以使用数据操作指令来直接加载 PC。 例如,若要从子例程返回,可以使用以下指令将链接寄存器复制到 PC 中:


    MOV pc,lr

在执行期间,r15 (pc) 不包含当前执行的指令的地址。 在 ARM 状态下,当前执行的指令的地址通常是 pc-8,而在 Thumb 状态下通常是 pc-4。

应用程序状态寄存器 (APSR)

APSR 存放算术逻辑单元 (ALU) 状态标记的副本。 这些标记用于确定是否执行条件指令。 有关详细信息,请参阅条件执行

在 ARMv5TE 和 ARMv6 及更高版本中,APSR 还存放 Q 标记(请参阅ALU 状态标记)。

在 ARMv6 及更高版本中,APSR 还存放 GE 标记(请参阅并行加法和减法)。

可在所有模式下使用 MSRMRS 指令访问这些标记。 有关详细信息,请参阅MRSMSR

当前程序状态寄存器 (CPSR)

CPSR 存放下列内容:

  • APSR 标记

  • 当前处理器模式

  • 中断禁用标记。

在支持 Thumb 或 Jazelle® 的处理器上,CPSR 还存放当前处理器状态(ARM、Thumb、ThumbEE 或 Jazelle)。

在 ARMv6T2 及更高版本中,Thumb-2 为 CPSR 引入了新的状态位。 IT 指令使用这些位来控制 IT 块的条件执行(请参阅IT)。

在所有模式下均可访问的标记只有 APSR 标记。 对于 CPSR 的其余位,只能在特权模式下使用 MSRMRS 指令访问它们。 有关详细信息,请参阅MRSMSR

保存的程序状态寄存器 (SPSR)

当发生异常时,使用 SPSR 来存储 CPSR。 在每种异常处理模式下,可访问一个 SPSR。 用户模式和系统模式没有 SPSR,因为二者不是异常处理模式。 有关详细信息,请参阅RealView 编译工具开发指南中的第 6 章 处理处理器异常

Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0204HC
Non-Confidential