ARM处理器,有一个寄存器,叫CPSR,保存了当前的处理器状态。但在ARMv8中,AArch64(以下简称A64)和AArch32(以下简称A32)对于这寄存器,有不同的规定。
一、 A64
在A64中,不在使用单一的CPSR寄存器,来保存当前处理器状态,而是用PSTATE来保存处理器状态。
PSTATE,包括以下的一些系统寄存器:
1. NZCV寄存器:保存条件标志
可读可写寄存器。
2. DAIF寄存器: DAIF状态
4种事件的mask。
3. CurrentEL: 当前的 exception level
A64有4个exception level,当前的EL,保存在这个寄存器中。这个寄存器是只读寄存器。
4. SPSel:当前栈的选择
在EL3,EL2,EL1,是可以选择SP,是使用SP_ELx,还是SP_EL0,通过这个寄存器设置。
5. PAN:privileged access never
6. UAO: user access override
以上的寄存器,通过 mrs 指令和 msr 指令进行访问。A64,也提供了几条指令,用来快速访问这些系统寄存器。
二、 A32
使用CPSR
其中T位,表示是arm状态还是thumb状态。
第4位固定为1,表示是A32架构。
0: aarch64
1: aarch32
M[3:0],表示异常模式
系列其他篇
原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。