ARM Cortex-A系列编程指南之ARMv8 A -- 第四章 ARMv8寄存器

ARM Cortex-A系列编程指南之ARMv8 A -- 第四章 ARMv8寄存器,第1张

ARM Cortex-A系列编程指南之ARMv8 A -- 第四章 ARMv8寄存器 1、通用寄存器

AArch64运行环境提供了31个64bit的通用寄存器:X0~X31,同时他们也都有32bit的形式:W0~W31,他们对应映射到64bit寄存器的低32位。

读取W寄存器,将会只读X的低32位;

写W寄存器,将会将X的高32位写为0。也就是说设置W0为0xFFFFFFFF,结果设置X0为0x00000000FFFFFFFF。

2、AArch64特殊寄存器

 除了31个核心寄存器外,还有一些特殊寄存器。

在AArch64运行状态,异常返回的状态,保存在每个异常等级的ELR和SPSR寄存器 (EL0不用异常返回,所以这个异常等级没有ELR和SPSR寄存器)。

2.1 XZR/WZR寄存器(零寄存器)

读的时候返回0,写的时候忽略写的值。

2.2 SP寄存器(堆栈指针)

每个异常等级都有自己的SP寄存器(SP_EL0, SP_EL1, SP_EL2, SP_EL3)。但是,除了EL0以外,其它异常等级都有两个选择,或者用自己等级的SP_ELn,或者用EL0等级的SP_EL0;EL0就只能用SP_EL0了。

异常等级选项EL0EL0tEL1EL1t, EL1hEL2EL2t, EL2hEL3EL3t, EL3h

t表明选择了SP_EL0寄存器,h表明选择了SP_ELn寄存器。

2.3 PC寄存器(程序计数)

ARMv7有个R15寄存器,就是PC(程序计数)寄存器,是可以作为通用寄存器使用的。

但是ARMv8这里不一样了,不能被当做有名字的寄存器来访问了。

2.4 ELR(异常连接)寄存器

 保存异常返回的地址。

2.5 SPSR寄存器(保存的进程状态寄存器)

当异常发生时,处理器的状态就被保存在SPSR寄存器里,和ARMv7中的CPSR类似。SPSR保存了处理异常前的PSTATE,当异常返回前需要将PSTATE设回来。

 3、处理器状态(PSTATE)

AArch64没有像ARMv7的CPSR寄存器,需要通过PSATE,其各个字段定义如下:

其中N、Z、C、V可以在EL0访问,其他字段在EL0是未定义状态,需要在EL1或者更高级访问或执行。

在AArch64运行状态,通过执行ERET指令从异常返回,从而导致SPSR_ELn被拷贝到了PSTATE。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5659044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存