ARMv8中的一些重要寄存器
AArch64执行状态提供了31×64位的通用寄存器,可以在任何时候和所有异常级别下访问。每个寄存器的宽度为64位,它们通常被称为寄存器X0-X30。
通用寄存器除了用于标准运算和存储之外,还在函数调用过程中有特殊作用:
-
X0~X7
传递参数和结果
-
X8~X15
X8:间接结果寄存器
X9~X15:临时寄存器
-
X16~X18
ARM平台寄存器
X16:IP0;
X17:IP1;
X18:PR
-
X19~X28
被调用函数需要保存
-
X29~X30
X29:FP栈帧寄存器
X30:链接寄存器
X表示64位通用寄存器,而W表示低32位的数据,例如W0表示X0的低32位。
PSTATE寄存器
AArch64没有直接等同于ARMv7的当前程序状态寄存器(CPSR)。在AArch64中,传统的CPSR的组件是作为字段提供的,可以独立访问。这些被统称为处理器状态(PSTATE)。
AArch64的处理器状态或PSTATE字段有以下定义:
特殊寄存器
除了31个通用寄存器,还提供了多个特殊寄存器。如下图所示,接下来我们会重点介绍其中几个寄存器。
零寄存器
ARMv8有两个0寄存器,分别是WZR和XZR。零寄存器内容为0,可以作为源寄存器,也可以作为目的寄存器。
PC寄存器
PC用来指向当前运行指令的下一条指令的地址。
SP寄存器
每个异常等级都有一个SP寄存器,EL0中的SP可以当做临时寄存器,例如Linux中存放task_struct结构。
CurrentEL寄存器
表示PSTATE中的EL字段,即当前的异常等级。
SPSR寄存器
SPSR保存处理状态寄存器,当发生异常时,处理器状态被存储在相关的保存程序状态寄存器(SPSR)中,其方式类似于ARMv7中的CPSR。SPSR在发生异常之前持有PSTATE的值,在执行异常返回时用于恢复PSTATE的值。SPSR_X表示不同处理器模式下的SPSR寄存器。
![image-20220504091725294](/Users/lzm/Library/Application Support/typora-user-images/image-20220504091725294.png)
ELR寄存器
存放了异常返回地址。
SPSel寄存器
在SP_EL0和SP_ELn中选择SP寄存器。
- 点赞
- 收藏
- 关注作者
评论(0)