ARMv8的CPSR

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分类目录。将固定链接加入收藏夹。

2 则回应给 ARMv8的CPSR

  1. 匿名说:

    1.请问CPSR和PSTATE的关系是什么呢?
    2.CPSR和NZCV属于包含关系吗?可以理解为NZCV就是CPSR中部分位的别名吗?

  2. 匿名说:

    问题:
    1.AARCH64的nzcv信息具体存储在cpu的什么地方?和arm32的实现一样吗?

发表评论

电子邮件地址不会被公开。