ARM处理器模式与寄存器
模式
不同的体系结构所定义的模式是有差异的,不过它们是向后兼容的,下面是Cotext-A9系列处理器(ARMv7指令集)所支持的处理器模式。
模式名称 | 代码 | 描述 |
---|---|---|
User(USR) | 10000 | 大部分应用程序运行时所处的非特权模式 |
FIQ | 10001 | FIQ异常中断 |
IRQ | 10010 | IRQ异常中断 |
Supervisor(SVC) | 10011 | 管理调用指令被执行或者reset的时候 |
Monitor(MON) | 10110 | 安全扩展模式,只用于安全 |
Abort(ABT) | 10111 | 存储访问模式 |
Hyp(HYP) | 11010 | 虚拟化扩展 |
Undef(UND) | 10011 | 未定义指令执行的时候 |
System(SYS) | 11111 | 特权模式,该模式与USR模式共享寄存器 |
寄存器
通用寄存器
R0—R12这13个叫做通用寄存器,一般来说它们可以用作任何用途。
R13:也叫sp,通常用作栈指针,注意每一种模式都有自己的R13寄存器副本。
R14:也叫lr(连接寄存器)。该寄存器有两个用途:一是在子程序调用时,lr用于保存返回地址;二是当异常中断发生时,该异常模式的特定的物理lr寄存器被设置成该异常模式将要返回的地址(这步由硬件自动完成)。
R15:也叫pc,即程序计数器,保存的永远是当前要取址(注意流水线技术)的指令的地址。在ARM状态下,它与当前正在执行的指令的地址相差8个字节(3级流水线)。
状态寄存器
CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问,它包含了条件标志位、中断禁止位、当前处理器模式标志以及其它一些控制和状态位,格式如图所示。此外,每一种异常模式还有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器),当特定的异常发生时,这个寄存器用于保存CPSR的内容,在异常模式返回时,可以用SPSR中保存的值来恢复CPSR。
- M:处理器模式位,通过修改该部分,可以切换处理器工作模式;
- T:标识当前是否正在使用Thumb指令,0为ARM指令模式,1为Thumb指令模式;
- F:FIQ禁用标志位,如果为1,则禁用FIQ,0为打开;
- I:类似的,这是IRQ禁用标志位;
- A:Abort模式禁用标记,如果为1,那么禁用Abort,0为打开;
- E:大小端标记,1为大端,0为小端;
- IT:Thumb-2的if…then执行;
- GE:SIMD指令使用;
- J:Jezalls模式是否启用,1为启用,0不启用;
- IT:Thumb指令使用;
- Q:累计饱和标记;
- V:ALU操作溢出标记;
- C:ALU进位标记;
- Z:ALU零位标记;
- N:ALU负数;