1. ARM处理器的7种工作模式:
USER:非特权模式,大部分任务执行在该模式下
FIQ:高优先级中断模式
IRQ:低优先级中断模式
Supervisor:复位/软中断指令执行时会进入该模式
Abort:存取异常模式
Undef:执行未定义指令
System:与user模式使用的寄存器相同,但是它可以执行普通指令,也可以执行特权指令
各种运行模式的切换是可以由程序员通过代码主动切换的(通过读写CPSR寄存器),也可以是CPU在某些情况下自动切换的。在各种模式下,其访问权限和可访问的寄存器是不同的。
寄存器 | user_mode | FIQ_mode | IRQ_mode | SVC_mode | Undef_mode | Abort_mode |
R0 | R0 |
|
|
|
|
|
R1 | R1 |
|
|
|
|
|
R2 | R2 |
|
|
|
|
|
R3 | R3 |
|
|
|
|
|
R4 | R4 |
|
|
|
|
|
R5 | R5 |
|
|
|
|
|
R6 | R6 |
|
|
|
|
|
R7 | R7 |
|
|
|
|
|
R8 | R8 | R8 |
|
|
|
|
R9 | R9 | R9 |
|
|
|
|
R10 | R10 | R10 |
|
|
|
|
R11 | R11 | R11 |
|
|
|
|
R12 | R12 | R12 |
|
|
|
|
R13(SP) | R13(SP) | R13(SP) | R13(SP) | R13(SP) | R13(SP) | R13(SP) |
R14(LR) | R14(LR) | R14(LR) | R14(LR) | R14(LR) | R14(LR) | R14(LR) |
R15(PC) | R15(PC) |
|
|
|
|
|
CPSR | CPSR |
|
|
|
|
|
SPSR |
| SPSR | SPSR | SPSR | SPSR | SPSR |
ARM一个有37个寄存器,长度均为32位,其中通用型的有30个,1个特定用途PC,1个程序状态寄存器CPSR,5个异常模式下的SPSR。
2. 关于CPSR程序状态寄存器的简单介绍:
31-27条件位(N,Z,C,V,Q)他们的内容可以被算数或逻辑运算的结果所改变,并且这些位可以决定某条条件指令是否被执行,条件位具体含义如下:
标志 | 含义 |
N | 当两个有符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零 |
Z | Z=1表示运算的结果为零,Z=0表示运算的结果非零。 |
C | 可以有4种方法设置C的值: |
-加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 | |
-减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1。 | |
-对于包含移位操作的非加/减运算指令,C为移出值的最后一位。 | |
-对于其它的非加/减运算指令,C的值通常不会改变。 | |
V | 可以有2种方法设置V的值: |
-对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出 | |
-对于其它的非加/减运算指令,V的值通常不会改变。 | |
Q | 在ARM V5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其它版本的处理器中,Q标志位无定义 |
在ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的。
24位(J位),该位置1,表示处理器处于JAVA加速(仅ARM 5TE/J架构支持)
7-6位(I F)中断控制位,I=1禁止IRQ,F=1禁止FIQ
5位(T位),T=0,处理器处于ARM状态,T=1,处理器处于Thumb状态
4-0位(处理器模式位),在uboot代码中会使用汇编指令进行设置
3. ARM的异常处理机制:
当异常差生时,处理器会进行如下操作:
一.拷贝CPSR到SPSR_<mode>。
二.设置适当的CPSR标志位(改变处理器模式进入ARM态、改变处理器进入响应的异常模式、在需要的时候设置中断禁止位)
三.保存返回地址到LR_<mode>
四.设置PC为相应的异常向量
五.进行中断服务
六.从SPSR_<mode>恢复CPSR
七.从LR_<mode>恢复PC