ARM微处理器寄存器组织
通用寄存器
未分组寄存器
- 未分组寄存器:R0~R7
- 在所有的其中模式下,都只想相同的物理寄存器
- 用途:保存数据或地址
[!attention] 需要小心工作模式转换时,可能会造成寄存器中的数据破坏
分组寄存器
- 分组寄存器R8~R14
- R8~R12
- 每次访问的物理寄存器与当前的运行模式有关
- R13~R14
- R13堆栈指针
- 在ARM指令集中,常用作堆栈指针
- 在Thumb指令集中,某些指令强制性要求使用R13作为堆栈指针
- R14子程序链接寄存器
- 又称为链接寄存器LR
- 当执行子程序调用指令
BL
时,可以用于得到程序计数器PC(R15)
的值 - 两种特殊功能:
- 在每种模式下都可以用于保存子程序的返回地址
- 发生异常时,用于保存异常处理后的返回地址
- 如中断处理
- 程序计数器PC(R15)
- 所有运行模式通用
- ARM状态:
bit[1:0]=00
,bit[31:2]
用于存放PC- PC的值:当前正在执行的指令地址+8(当前正在执行指令的下两条指令)
- 原因:ARM的三级流水线
- PC的值:当前正在执行的指令地址+8(当前正在执行指令的下两条指令)
- Thumb状态:
bit[0]=0
,bit[31:1]
用于存放PC[!tip] 当程序运行进入异常模式时,可以将需要保护的寄存器内容放入R13所指向的堆栈中,当程序从异常模式返回时,则可以从对应的堆栈中进行恢复
- R13堆栈指针
状态寄存器
- 状态寄存器6个
- 当前程序状态寄存器CPSR(Current Program Status Register)
- 所有运行模式下都指向相同的物理寄存器
- 备份程序状态寄存器SPSR(Saved Program Status Register)
- 每种异常模式都有自己专用的物理寄存器
- 异常发生时,用于操作CPSR;退出异常时,进行恢复
- 用户模式和系统模式下无效
- 条件码标志位
N
、Z
、C
、V
:- 它们的内容由算术或逻辑运算的结果决定,通常用于决定某条指令是否可以被执行
- ARM状态:绝大多数的指令都是有条件执行的
- Thumb状态:仅有分支指令(B指令)是有条件执行的
- 保留位:
- 为了提高程序的可移植性,当改变CPSR标志和控制位时,尽量不改变保留位的值
- 为了保证程序后续的兼容性,不应该让保留位的值影响程序的运行
- 控制位
I
、F
、T
和M[4:0]
:发生异常时候可以被改变- 特别:在特权模式下,可以由程序来修改:
- 中断禁止位:
I
、F
I=1
:禁止IRQ
中断F=1
:禁止FIQ中断
- 模式位
M[4:0]
:决定处理器的运行模式:10000
:用户模式10001
:FIQ模式10010
:IRQ模式10011
:管理模式10111
:中止模式11011
:未定义11111
:系统模式
- 中断禁止位:
T
反映处理器的运行状态:ARM/Thumb
[!attention] Thumb状态下的寄存器组是ARM状态下寄存器组的一个子集