卢骏 · 2020年06月18日

ARMv8的CPSR

ARM处理器,有一个寄存器,叫CPSR,保存了当前的处理器状态。但在ARMv8中,AArch64(以下简称A64)和AArch32(以下简称A32)对于这寄存器,有不同的规定。

一、 A64

在A64中,不在使用单一的CPSR寄存器,来保存当前处理器状态,而是用PSTATE来保存处理器状态。

PSTATE,包括以下的一些系统寄存器:

1. NZCV寄存器:保存条件标志

可读可写寄存器。
1.png

2. DAIF寄存器: DAIF状态

4种事件的mask。
2.png

3. CurrentEL: 当前的 exception level

A64有4个exception level,当前的EL,保存在这个寄存器中。这个寄存器是只读寄存器。
3.png

4. SPSel:当前栈的选择

在EL3,EL2,EL1,是可以选择SP,是使用SP_ELx,还是SP_EL0,通过这个寄存器设置。
4.png

5. PAN:privileged access never

5.png

6. UAO: user access override

6.png

以上的寄存器,通过 mrs 指令和 msr 指令进行访问。A64,也提供了几条指令,用来快速访问这些系统寄存器。
7.png

二、 A32

使用CPSR
8.png

其中T位,表示是arm状态还是thumb状态。
9.png

第4位固定为1,表示是A32架构。

0: aarch64

1: aarch32

M[3:0],表示异常模式
10.png

系列其他篇

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。
推荐阅读
关注数
23386
内容数
892
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息