arm体系结构支持7种处理器模式:
用户模式:正常程序工作模式,不能直接切换到其它模式。
快中断模式:支持高速数据传输及通道处理。fir异常响应时,进入此模式
中断模式:通用中断处理。irq异常响应时,进入此模式。
管理模式:操作系统保护代码,系统复位和软件中断时,进入此模式。
中止模式:支持虚拟内存,存储器保护。
未定义模式:支持硬件协处理器和软件仿真。未定义指令异常响应时,进入此模式。
系统模式:用于支持os的特权任务。与用户模式类似,但可以直接切换到其它模式。
除用户模式外,其它都为特权模式。某些arm内部寄存器和一些片内外设在硬件设计上只允许特权模式下访问。特权模式可以自由切换处理器模式。但用户模式不能直接切换到别的模式。
arm7tdmi内核包含1个cpsr和5个供异常处理程序使用的spsr.
arm7tdmi内核所有处理器状态都保存在cpsr中。
cpsr包含:
4个条件代码标志。
2个中断禁止位。
5个队当前处理器模式进行编码的位。
1个用于只是当前执行指令(arm还是thumb)的位。
每个异常模式(快中断模式,中断模式,管理模式,中止模式,未定义模式)还带有一个程序状态保存寄存器 spsr。用于保存任务在异常发生之前的cpsr.
4个条件代码标志:
n:运算结果的b31值。
z:指令结果为0时,z=1(通常表示比较结果相等) . 否则z=0.
c: 使用加法运算时,b31位产生进位,c=1.否则c=0. 使用减法运算时,b31借位时,c=0,否则c=1。
v: 加减运算时,有符号溢出,v=1,否则v=0。
2个中断禁止位:
i: 置位,irq 中断被禁止。
f:置位,fiq中断被禁止。
1个用于只是当前执行指令(arm还是thumb)的位:
置位:表示处理器在thumb.
清零:处理器在arm。
5个队当前处理器模式进行编码的位:
10000:用户。
10001:快中断。
10010:中断
10011:管理
10111:中止
11011:未定义
11111:系统。
注意,在不同模式下,可见的寄存器不同。
使用mrs指令可以读取状态寄存器指令。
mrs r1, cpsr
mrs r2,spsr
使用msr指令,可以写状态寄存器。
例1:使能irq中断:
mrs r0, cpsr //把cpsr内容放到ro中
bic r0, r0, #0x80 //将i 位清除。irq enable
msr cpsr_c ,r0
mov pc, lr
注意:axd中的processor registers项中,cpsr,spsr显示模式如下:
nzcvqift_svc
nzcv:分别表示4个标志位。小写字母表示0 , 大写字母表示1
ift分别表示irq,fiq,和执行指令标志位。
svc表示工作模式为:管理模式。