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