ARM32 寄存器分类

ARM32 处理器共有37个寄存器,所有这些寄存器都是32位的。
1,31 个通用寄存器,包括一个程序计数器寄存器
2,6 个状态寄存器
所有的寄存器编排有重叠的分组,有当前的处理器模式决定使用哪一个分组。在任何时候,15个通用寄存器
(R0 ~ R14),一个或两个状态寄存器和程序计数器是可见的。如下表所示,每一列显示在指定处理器模式下
的那些通用寄存器和状态寄存器是可见的。
ARM32 寄存器分类_第1张图片
通用寄存器:通用寄存器(R0 ~ R15)可以分为3组
1,未分组的寄存器R0 ~ R7
2,分组的寄存器R8 ~ R14
3,程序计数器寄存器 PC

未分组的寄存器R0 ~ R7
寄存器R0 ~ R7是未分组的寄存器。它们中的每一个在所有的处理器模式下都是相同的32位物理寄存器。它
们是完全的通用寄存器,没有被处理器架构定义的特殊用途。

分组的寄存器R8 ~ R14
分组的寄存器R8 ~ R14,它们中的每一个代表的物理寄存器依赖与当前的处理器模式。当使用一个通用寄存
器时,几乎所有的指令都可以使用这些分组寄存器。
寄存器R8 ~ R12中的每一个都有两个分组物理寄存器:一组用于FIQ模式,另一组用于其他处理器模式。第
一组可以用R8_fiq ~ R14_fiq表示,另一组用R8_usr ~ R14_usr表示。
寄存器R8 ~ R12在体系中没有任何指定的特殊目的。然而,在简单的中断处理中只需要使用寄存器R8 ~
R14,FIQ模式下的寄存器允许更快的中断处理。
寄存器R3和R14都有6个分组物理寄存器,其中一个用在User和SYSTEM模式下,其余的5个用在5种异常模式下,当需要区分时用如下格式命名:
R13_
R14_
注: 是指usr, svc, abt, und, irq和fiq

寄存器R13通常被用作栈寄指针SP,每一种异常模式都有自己的分组寄存器R13

寄存器R14(链接寄存器或LR)在体系结构中有两种特殊用途:
1,在各种模式下,R14用来保存子程序的返回地址。当一条BL或者BLX指令执行子程序调用时,R14设为子
程序的返回地址。通过复制R14中的地址值到PC中来实现子程序的返回。
2,当发生异常时,相关异常模式下的R14就设为异常返回地址。异常的返回地址与子程序的返回类似,使用
指令恢复异常发生前的程序状态。

寄存器R15:程序计数器
R15是程序计数器(PC),其内容是处理器要取的下一条指令的地址。在ARM状态下,所有的ARM指令都是4字
节长,一直都是字对齐的,这意味着PC的最低两位一直是0,因此PC只包含30位可变的位。ARM体系中的
一些版本也支持其他两种处理器状态。T变种支持Thumb状态,J变种支持Jazelle状态。这些状态下PC可以
是半字和字节对齐。

你可能感兴趣的:(linux嵌入式开发,ARM寄存器分类,arm32,寄存器)