ARM寄存器
寄存器是存在于CPU中的存储速度极快的存储器,主要负责储存程序运行过程中需要保存的临时变量和系统环境变量等等.
操作模式
为了处理不同的情况,ARM设置了8中操作模式:(除了user模式,其他的都是特权模式Privileged Mode, user模式不能主动切换到其他模式)
寄存器组织概要
在32-bit的ARM Cortex-A8处理器中的寄存器相应的也是32位的.并且每种不同的操作模式都有一组对应的寄存器阻( 通用寄存器+各自独有的寄存器 ),如图:
从上图可看出,一共有40个32-bit的寄存器:
1. 32个通用寄存器;
r0-r13可以用来储存数据或者地址
r14: Link Register: It receives the return address when the processor executes a
Branch with Link ( BL or BLX ) instruction.
You can treat r14 as a general-purpose register at all other times. Similarly,
the corresponding banked registers r14_mon, r14_svc, r14_irq, r14_fiq,
r14_abt, and r14_und hold the return values when the processor receives
interrupts and exceptions, or when it executes the BL or BLX instructions
within interrupt or exception routines
2. 7个状态寄存器:(state program status register)
- 一个 [ CPSR ] (Current Program State Register,储存当前程序的状态): CPSR在用户级编程时用于存储条件码。CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。
CPSR 详细的记录看这里 - 6个SPSR(Saved Program State Register,保存程序的运行状态): SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
3. 1个程序计数器PC(program counter)
- ALU算术逻辑单元的状态标志的备份;
- 当前处理器模式;
- 中断使能标志;
- 条件标志condition code flags
通用寄存器分组
通用寄存器也是有分类的,根据它们是否分组分为:
未分组寄存器R0-R7
R0 - R7, 这几个寄存器对于任何一个模式都是通用的功能,没有被系统用作特殊的用途, 使用的是相同的物理寄存器.
分组寄存器R8-R14
R8 - R14,它们没有访问的物理寄存器取决于当前的处理器模式.从第一份图可看出,FIQ快速终端处理模式由于需要FAST, 因此,这FIQ模式下,访问的物理寄存器R8-R14就不同于其他模式,这样也是为了实现快速,不被其他模式破坏.
因此在使用的时候,使用寄存器后缀名加以区分.
例如: R8_user/R8_fiq;
这样,当FIQ中断到达时,不用保存其他模式通用寄存器的状态,也不用执行恢复现场的指令,从而使中断快速处理,因此,FIQ模式通常被用来处理紧急的任务,如DMA处理.
特殊的R13(SP),R14(LR)每个寄存器对应8组不同的物理寄存器,处理user/sys模式,其他都不同,因此,为了区分,使用是也需要加上后缀:
R13_< mode>
R14_< mode>
R13,R14详细记录