ARM体系的CPU有以下7种工作模式:
1、用户模式(Usr):用于正常执行程序;
2、快速中断模式(FIQ):用于高速数据传输;
3、外部中断模式(IRQ):用于通常的中断处理;
4、管理模式(svc):操作系统使用的保护模式;
5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护;
6、系统模式(sys):运行具有特权的操作系统任务;
7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件;
当异常发生的时候CPU会进入到相应的模式来进行处理:
异常 | 模式 | 描述 |
复位 | 管理模式 | 复位电平有效时,产生复位异常,程序转跳到复位处理程序执行 |
未定义指令 | 未定义模式 | 遇到不能处理的指令,产生未定义指令异常 |
软件中断 | 管理模式 | 执行swi指令产生,用于用户模式下的程序调用特权操作指令 |
预存指令 | 中止模式 | 处理器预取指令的地址不存在,或者该地址不允许当前指令访问,产生指令预取中断异常 |
数据操作 | 中止模式 | 处理器预取数据的地址不存在,或者该地址不允许当前指令访问,产生指令预取中断异常 |
未使用 | 未使用 | 未使用 |
IRQ | IRQ | 外部中断请求有效,且CPSR中的1位为0时,产生IRQ异常 |
FIQ | FIQ | 快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常 |
以下是寄存器和运行模式对应的关系:
R0---R12是普通寄存器,可以任意读写.
R13是栈指针寄存器,用于保存堆栈指针
R14是程序连接寄存器,当执行BL子程序调用指令时,R14中得到R15的备份,而当发生中断或异常时,R14保存R15的返回值
R15是程序计数器
(A/C)PSR:(标志位寄存器)
T位:1——CPU处于Thumb状态, 0——CPU处于ARM状态;
I、F(中断禁止位): 1——禁止中断, 0——中断使能;
工作模式位:可以改变这些位,进行模式切换;
spsr:程序状态保存寄存器,当切换进入某一个特权模式时,SPSR保存前一个工作模式的CPSR值,这样,当返回前一个工作模式时,可以将SPSR的值恢复到CPSR中