ARM核工作模式
User和System是正常工作模式,其他七个是异常工作状态
Monitor只能在安全情况执行
Hyp(主要用来做虚拟化处理)只能在非安全情况执行
User权限级别为0
除过Hyp级别为2,其他都为1
Encoding用来区分不同工作模式
FIQ(快中断)和IRQ(慢中断)用的比较多,要记
模式的改变可以在软件控制的情况下改变
工作模式的转换可以通过代码来转换,也可以通过外部和内部的异常来引起转换
安全状态都是PL0和PL1(权限级别)
PL0--非特权模式,有些系统资源没法访问
PL1、PL2--特权模式,可以访问系统资源
在User模式下无法通过编码形式来引起模式的改变,只能通过异常
用户模式是用户程序的工作模式,只能处理自己的数据,也不能切换到其他模式下
System模式不能通过异常进入,用户模式和System共用一套寄存器,系统模式属于特权模式
Supervisor mode 处理器在复位时进入该模式,当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式
Abort mode 段错误会导致进入中止模式
Underfined mode 未定义模式,是指令的异常(未能识别的指令)导致的模式
FIQ快中断,用来处理时间要求比较紧的中断请求,主要用于高速数据传输以及通道处理
IRQ一般中断,用于处理一般的中断请求,通常在硬件产生中断之后自动进入,该模式是特权模式,可以自由访问系统硬件资源
寄存器可以记录因中断而停止的位置
Hyp只能在非安全的PL1模式下进入
Monitor mode 监视器模式始终处于安全模式,处于该模式下可以访问寄存器的安全和非安全区域
ARM核V7架构
指令寄存器和程序计数器
系统视图
九种工作模式
R0-R12 SP LR PC 寄存器名称
在有些工作模式下由独立的寄存器
所有工作模式下共享寄存器R0-R7的值
快中断有R8-R12的独立寄存器资源
SP--栈寄存器
SP和LR(除过Hyp)在异常工作模式下有自己独立的寄存器资源
SPSR 恢复寄存器 用来恢复CPSR寄存器的数据 记录转入其他模式前的状态
R0-R10用来存放用户数据
R11(fp) 用来记录一个栈空间的开始地址
R12 (ip)用来存放临时sp
R13 (sp)栈指针寄存器(栈顶)
R14(lr)发生跳转时,用来保存PC寄存器的值
R15(pc)程序计数器,用来存放CPU需要执行的指令所在内存的地址
CPSR 当前程序状态寄存器 ,包括当前在哪种工作状态下执行 0-4位记录当前工作模式
第5位用来决定处于ARM态还是Thumb态
NZCV用来判断接下来的指令是否需要执行
寄存器长度为32,所以标出0-31
SPSR 保存程序状态寄存器,还会保存CPSR寄存器的值,用来恢复
中断是一种特殊的异常