ARM微处理器支持7种运行模式,分别为:
1.用户模式(usr):ARM处理器正常的程序执行状态;
2.快速中断模式(fiq):用于高速数据传输或通道管理;
3.外部中断模式(irq):用于通用的中断处理;
4.管理模式(svc):操作系统使用的保护模式;
5.数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护;
6.系统模式(sys):运行具有特权的操作系统任务;
7.未定义指令中止模式(und):当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真
ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。
1、不分组寄存器(R0-R7)
在所有的处理器模式下指的都时同一物理寄存器。
2、备份寄存器(R8-R14)
对于R8-R12来说,除在快速中断模式下,每个模式对应相同物理寄存器,所以在FIQ模式下可不必保护和恢复中断现场。
对于R13-R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式和系统模式共用的。
寄存器R13常用做栈指针SP,除用户和系统模式外,其他模式在使用时的名字构成为R13_<mode>。
寄存器R14又被称为连接寄存器(LR),除用户和系统模式外,其他模式在使用时的名字构成为R14_<mode>。
3、程序计数器R15
4、程序状态寄存器
CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。同时除了用户和系统模式以外,每中处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。
31
|
30
|
29
|
28
|
27 - 0 8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
N
|
Z
|
C
|
V
|
|
I
|
F
|
T
|
M4
|
M3
|
M2
|
M1
|
M0
|
当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数,N=0 表示结果为正数或零
Z Z=1表示运算结果是0,Z=0表示运算结果不是零
对于CMP指令,Z=1表示进行比较的两个数大小相等
C 在加法指令中(包括比较指令CMN),结果产生进位了,则C=1,表示无符号数运算发生上溢出,其他情况下C=0
在减法指令中(包括比较指令CMP),结果产生借位了,则C=0,表示无符号数运算发生下溢出,其他情况下C=1
对于包含移位操作的非加/减法运算指令,C中包含最后一次被溢出的位的数值,对于其他非加/减法运算指令,C位的值通常不受影响
V 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
其他的指令通常不影响V位
当I=1时禁止IRQ中断。
当F=1时禁止FIQ中断。
对于ARM v3及更低的版本和ARM v4的非T系列版本的处理器,没有ARM和Thumb指令的切换,所以T始终为0。
对于ARM v4及更高版本的T系列处理器,T控制位含义如下。
当T=0,表示执行ARM指令。
当T=1,表示执行Thumb指令。
对于ARM v5及更高的版本的非T系列处理器,T控制位的含义如下。
当T=0表示执行ARM指令。
当T=1表示强制下一条执行的指令产生为定义指令中断。
用户模式
|
系统模式
|
特权模式
|
中止模式
|
未定义指令模式
|
外部中断模式
|
快速中断模式
|
R0
|
R0
|
R0
|
R0
|
R0
|
R0
|
R0
|
R1
|
R1
|
R1
|
R1
|
R1
|
R1
|
R1
|
R2
|
R2
|
R2
|
R2
|
R2
|
R2
|
R2
|
R3
|
R3
|
R3
|
R3
|
R3
|
R3
|
R3
|
R4
|
R4
|
R4
|
R4
|
R4
|
R4
|
R4
|
R5
|
R5
|
R5
|
R5
|
R5
|
R5
|
R5
|
R6
|
R6
|
R6
|
R6
|
R6
|
R6
|
R6
|
R7
|
R7
|
R7
|
R7
|
R7
|
R7
|
R7
|
R8
|
R8
|
R8
|
R8
|
R8
|
R8
|
R8_fiq
|
R9
|
R9
|
R9
|
R9
|
R9
|
R9
|
R9_fiq
|
R10
|
R10
|
R10
|
R10
|
R10
|
R10
|
R10_fiq
|
R11
|
R11
|
R11
|
R11
|
R11
|
R11
|
R11_fiq
|
R12
|
R12
|
R12
|
R12
|
R12
|
R12
|
R12_fiq
|
R13
|
R13
|
R13_svc
|
R13_abt
|
R13_und
|
R13_inq
|
R13_fiq
|
R14
|
R14
|
R14_svc
|
R14_abt
|
R14_und
|
R14_inq
|
R14_fiq
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
CPSR
|
CPSR
|
CPSR
SPSR_svc
|
CPSR
SPSR_abt
|
CPSR
SPSR_und
|
CPSR
SPSR_inq
|
CPSR
SPSR_fiq
|
1> R0 - R7是相同的
2> CPSR和SPSR是相同的
3> Thumb状态下的SP相当于ARM状态的R13
4> Thumb状态下的LR相当于ARM状态的R14
5> Thumb状态下的程序计数器相当于ARM状态下的R15
用户模式
|
系统模式
|
特权模式
|
中止模式
|
未定义指令模式
|
外部中断模式
|
快速中断模式
|
R0
|
R0
|
R0
|
R0
|
R0
|
R0
|
R0
|
R1
|
R1
|
R1
|
R1
|
R1
|
R1
|
R1
|
R2
|
R2
|
R2
|
R2
|
R2
|
R2
|
R2
|
R3
|
R3
|
R3
|
R3
|
R3
|
R3
|
R3
|
R4
|
R4
|
R4
|
R4
|
R4
|
R4
|
R4
|
R5
|
R5
|
R5
|
R5
|
R5
|
R5
|
R5
|
R6
|
R6
|
R6
|
R6
|
R6
|
R6
|
R6
|
R7
|
R7
|
R7
|
R7
|
R7
|
R7
|
R7
|
SP
|
SP
|
SP_svc
|
SP_abt
|
SP_und
|
SP_inq
|
SP_fiq
|
LR
|
LR
|
LR_svc
|
LR_abt
|
LR_und
|
LR_inq
|
LR_fiq
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
CPSR
|
CPSR
|
CPSR
SPSR_svc
|
CPSR
SPSR_abt
|
CPSR
SPSR_und
|
CPSR
SPSR_inq
|
CPSR
SPSR_fiq
|