文章目录
- ARM 处理器模式
- 工作模式
- 模式切换
- 内核寄存器
- 各个模式对应的内核寄存器
ARM 处理器模式
ARMv7-a 处理器共有 9 种工作模式
工作模式
- User:用户模式,非特权模式,大部分程序运行的时候就处于此模式
- FIQ:快速中断模式,进入 FIQ 中断异常
- IRQ:一般中断模式,进入 IRQ 中断异常
- Supevisor(SVC):超级管理员模式,复位或者一个 Supervisor 指令调用
- Monitor(MON):监听模式,用户安全扩展模式
- Abort(ABT):数据访问中止模式,用户虚拟存储及存储保护
- Hyp(HYP):用于虚拟化扩展
- Undef(UND):未定义的指令终止模式
- System(SYS):系统模式,用于运行特权级的操作系统任务
从上表可以看出,系统一复位就处于 SVC
模式
模式切换
ARM 模式切换由 CPSR( Current Program Status Register) 寄存器控制
需要注意的是,
- User 模式下,操作 bit[4:0],即不能切换处理器模式
- User 模式下,不能操作 A,I 和 F 位
M[4:0] 对应的处理器模式如下表
内核寄存器
一共有 16 个寄存器,R[0-15]
- R13 - SP(stack pointer)
- R14 - LR(link register)
- R15 - PC(program counter)
各个模式对应的内核寄存器
浅色字体的是与 User 模式所共有的寄存器,蓝绿色背景的是各个模式所独有的寄存器
- 在所有模式中,低寄存器组(R0-R7) 是共享同一组寄存器的
- 一些高寄存器组在不同模式下有自己独有的寄存器,
- FIQ 模式下访问 R12 寄存器,它实际访问的是 R12_fiq
- SVC 模式下访问 SP 寄存器,它实际访问的是 SP_svc
- 除 sys模式外,SP 寄存器都是独立的,所以各个模式需要切换到对应的模式,然后设置自己的栈指针
- Hyp 模式下独有一个 ELR_hyp 寄存器。