37个寄存器
ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包括:
31个通用寄存器:包括程序计数器(PC指针),均为32位的寄存器。
6个状态寄存器:用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。
7种运行模式
ARM微处理器支持7种运行模式,分别为:
usr(用户模式):ARM处理器正常程序执行模式。
fiq(快速中断模式):用于高速数据传输或通道处理
irq(外部中断模式):用于通用的中断处理
svc(管理模式):操作系统使用的保护模式
abt (数据访问终止模式):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
sys(系统模式):运行具有特权的操作系统任务。
und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
ARM处理器在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。
Thumb工作状态
ARM处理器有32位ARM和16位Thumb两种工作状态。在32位ARM状态下执行字对齐的ARM指令,在16位Thumb状态下执行半字对齐的Thumb指令。
在Thumb状态下,程序计数器PC(Program Counter)使用位选择另一个半字。ARM处理器在两种工作状态之间可以切换,切换不影响处理器的模式或寄存器的内容。
当操作数寄存器的状态位(位[0])为1时,执行BX指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、FIQ、Undef、Abort和SWI)返回时,自动转换到Thumb状态。
当操作数寄存器的状态位(位[0])为0时,执行BX指令进入ARM状态,处理器进行异常处理(IRQ、FIQ、Reset、Undef、Abort和SWI)。在此情况下,把PC放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM状态。
通用寄存器
ARM处理器的37个寄存器被安排成部分重叠的组,不能在任何模式都可以使用,寄存器的使用与处理器状态和工作模式有关。每种处理器模式使用不同的寄存器组。其中15个通用寄存器(R0~R14)、1或2个状态寄存器和程序计数器是通用的。
通用寄存器(R0~R15)可分成不分组寄存器R0~R7、分组寄存器R8~R14和程序计数器R15三类。
不分组寄存器R0~R7
不分组寄存器R0~R7是真正的通用寄存器,可以工作在所有的处理器模式下,没有隐含的特殊用途。
分组寄存器R8~R14
分组寄存器R8~R14取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。
两组物理寄存器R8~Rl2
寄存器R8~Rl2可分为两组物理寄存器。一组用于FIQ模式,另一组国用于除FIQ以外的其他模式。第1组访问R8_fiq~R12_fiq,允许快速中断处理。第二组访问R8_usr~R12_usr,寄存器R8~R12没有任何指定的特殊用途。
Z:
若指令的结果为0,则置1(通常表示比较的结果为“相等”),否则置0。
C:
可用如下4种方法之一设置:
加法(包括比较指令CMN)。若加法产生进位(即无符号溢出),则C置1,否则置0。
减法(包括比较指令CMP)。若减法产生借位(即无符号溢出),则C置0,否则置1。
对于结合移位操作的非加法/减法指令,C置为移出值的最后1位。
对于其他非加法/减法指令,C通常不改变。
V:
可用如下两种方法设置,即
对于加法或减法指令,当发生带符号溢出时,V置1,认为操作数和结果是补码形式的带符号整数。
对于非加法/减法指令,V通常不改变。
控制位
程序状态寄存器PSR(Program Status Register)的最低8位I、F、T和M[4:0]用作控制位。当异常出现时改变控制位。处理器在特权模式下时也可由软件改变。
a. 中断禁止位
I:置1,则禁止IRQ中断
F:置1,则禁止FIQ中断
b. T位
T=0 指示ARM执行
T=1 指示Thumb执行
c. 模式控制位
M4、M3、M2、Ml和M0(M[4:0])是模式位,决定处理器的工作模式,如表所列。M[4:0]工作模式可访问的寄存器。
10000用户模式PC,CPSR,R14~R0
10001FIQ模式PC,R7~R0,CPSR, SPSR_fiq,R14_fiq~R8_fiq
10010IRQ模式PC,R12~R0,CPSR, SPSR_irq,R14_irq,R13_irq
10011管理模式PC,R12~R0, CPSR, SPSR_svc,R14_svc,R13_svc
10111中止模式PC,R12~R0, CPSR, SPSR_abt,R14_abt,R13_abt
11011未定义模式PC,R12~R0, CPSR, SPSR_und,R14_und,R13_und
11111系统模式PC,R14~R0,CPSR(ARM v4及以上版本)
并非所有的模式位组合都能定义一种有效的处理器模式。其他组合的结果不可预知。
其他位
程序状态寄存器的其他位保留,用做以后的扩展。