CPU一共有7种模式
- usr:用户模式
- sys:系统模式
- und:未定义指令模式
- svc:管理模式
- abt:终止模式(可以分为指令预取终止和数据访问终止)
- IRQ:中断模式
- FIQ:快中断模式(可以快速处理)
2-6为特权模式:可以编程操作某个寄存器CPSR直接进入其他模式,用户模式下不可直接进入其他模式(给应用程序用的)。
3-7为异常模式。
CPU state
- ARM state:用的是ARM指令集,每个指令4byte
- Thumb State:用的是Thumb指令集,每个指令2byte
比如:mov R0,R1 ARM:4Byte Thumb:2Byte(转为机器码用的字节数)
除用户模式,每种模式都有自己的专属寄存器(带黑色下三角图标),r13:sp(堆栈指针) r14:lr(保存返回的地址)。他们和用户模式下的r13,r14是不同的寄存器。
CPSR:当前程序状态寄存器
SPSR:保存的程序状态寄存器,用来保存被中断模式的CPSR
它们的格式:
cmp r0,r1:影响Z位 相等Zero位为1, beq xxx 如果Zero位为1的话就会跳转。
异常处理流程(硬件实现):
1.LR_异常 = 下一条指令的地址
2.SPSR_异常 = CPSR
3.修改CPSR的M4-M0进入异常模式
4.跳到向量表
1.PC = LR_异常减去offset(参考Table 2-2)
2.CPSR = SPSR_异常
3.清中断