ARM核(ARMv7)的寄存器资源

User模式寄存器是基础寄存器集
当处理器运行在其他模式(如 Supervisor 或 IRQ 模式)时,如果对应的模式没有自己独立的寄存器版本,那么就会直接使用 User 模式的寄存器(例如 R0_usr 到 R12_usr)。

某些模式有独立的寄存器版本
快速中断模式(FIQ):
FIQ 模式为了提高中断处理效率,设计了独立的寄存器集(R8_fiq 到 R12_fiq)。

空白表示共享 User 模式的寄存器
在 Supervisor、Abort 等模式中,R0-R12 的寄存器列表是空白的,这意味着这些模式下仍然使用 User 模式的寄存器版本(例如 R0_usr 到 R12_usr)。


ARM工作模式

  • User(用户模式):普通的用户态程序运行模式。
  • System(系统模式):类似用户模式,但拥有更高的权限。
  • Supervisor(管理模式):处理系统调用和异常(比如 SVC)。
  • Abort(终止模式):访问无效内存时进入的模式。
  • Undefined(未定义模式):运行未定义指令时进入的模式。
  • IRQ(中断模式):处理普通中断。
  • FIQ(快速中断模式):处理快速中断。
  • Monitor(监控模式):安全扩展相关的模式。
  • Hyp(虚拟化模式):虚拟化扩展相关的模式。

寄存器用途分析

  • R0-R10 用来存放用户的数据
  • R11(fp:frame-pointer) 用来记录一个栈空间的开始地址
  • R12(ip: The Intra-Procedure-call scratch register) 用来临时存储sp
  • R13(sp:stack pointer) 栈指针寄存器
  • R14(lr:link register) 在发生跳转的时候,用来保存PC寄存器的值
  • R15(pc:program counter) 用来存放CPU需要执行的指令所在内存的地址

CPSR(Current Program Status Register)

SPSR(Saved Program Status Register)
异常产生的时候,用来保存CPSR的值(异常后可以再把CPSR的值代回)