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模式共享寄存器

寄存器

ARM处理器模式与寄存器

通用寄存器

R0—R12这13个叫做通用寄存器,一般来说它们可以用作任何用途。

R13:也叫sp,通常用作栈指针,注意每一种模式都有自己的R13寄存器副本。

R14:也叫lr(连接寄存器)。该寄存器有两个用途:一是在子程序调用时,lr用于保存返回地址;二是当异常中断发生时,该异常模式的特定的物理lr寄存器被设置成该异常模式将要返回的地址(这步由硬件自动完成)。

R15:也叫pc,即程序计数器,保存的永远是当前要取址(注意流水线技术)的指令的地址。在ARM状态下,它与当前正在执行的指令的地址相差8个字节(3级流水线)。

状态寄存器

CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问,它包含了条件标志位、中断禁止位、当前处理器模式标志以及其它一些控制和状态位,格式如图所示。此外,每一种异常模式还有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器),当特定的异常发生时,这个寄存器用于保存CPSR的内容,在异常模式返回时,可以用SPSR中保存的值来恢复CPSR。
ARM处理器模式与寄存器

  • 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负数;