ARM的工作模式是跟架构、指令集有关,我们常说的ARM工作模式常常以32位的ARM V7指令集为例。
ARMv4和ARMv5的指令集规定了ARM的7种工作模式,由寄存器CPSR[4:0]决定(见下表),分别是
用户(User)模式:ARM处理器正常的程序执行状态
系统(System)模式:运行具有特权的操作系统任务
快速中断(FIQ)模式:用于处理紧急的中断,如高速数据传输或通道处理
普通中断(IRQ)模式:用于处理通用的中断,通常在硬件中断信号后进入该模式
管理(Supervisor)模式:操作系统使用的保护模式,是CPU上电后的默认模式,主要用于系统的初始化
数据访问终止(Abort)模式:用于虚拟存储及存储保护,当访问非法地址或读取无权限内存地址时进入该模式
未定义指令中止(Undifined)模式:当执行未定义的指令时进入该模式,用于支持硬件协处理器的软件仿真
CPSR[4:0]定义的ARM工作模式CPSR[4:0] | 处理器模式 | 可访问的寄存器 |
0b10000 | USER | R0~R14;PC;CPSR |
0b11111 | SYSTEM | R0~R14;PC;CPSR |
0b10001 | FIQ | R0~R7;R8_FIQ-R14_fiq;PC;CPSR;SPSR_fiq |
0b10010 | IRQ | R0~R12;R13_irq-R14_irq;PC;CPSR;SPSR_irq |
0b10011 | SUPERVISOR | R0~R12;R13_svc-R14_svc;PC;CPSR;SPSR_svc |
0b10111 | ABORT | R0~R12;R13_abt-R14_abt;PC;CPSR;SPSR_abt |
0b11011 | UNDEFINED | R0~R12;R13_und-R14_und;PC;CPSR;SPSR_und |
现在ARMv6和ARMv7指令集做出了改变,由MSP(主堆栈指针)和PSP(进程堆栈指针),用户模式和特权模式组合成4种工作模式,将其他模式整合到异常向量表中,干净简洁舒服啦。
ARM共有37个32位物理寄存器,其中,User和System使用完全相同的物理寄存器。
。。。。更详细的你可以参考我的博客