【方辉专栏】ARM64体系结构编程与实践学习笔记(二) Armv8寄存器
发布时间:2022-07-20

摘要: 本文主要介绍了Armv8寄存器都有哪些。

关键字:ARM64、Armv8、体系结构、ARM架构、通用寄存器、特殊寄存器


1. 通用寄存器

AArch64 执行状态支持31个64位的通用寄存器,分别是X0-X30;如果使用Xn(如X0,X1,X2...)表示64位寄存器,如果使用Wn(如W0,W1,W2...)表示Xn寄存器的低32位数据。



AArch32 执行状态支持16个32位的通用寄存器。


通用寄存器在函数调用过程中起到特殊作用。在ARM64体系结构的过程调用标准(Procedure Call Standard,PCS)中进行了规定。

PCS 定义哪些寄存器可以被破坏,哪些寄存器不能被破坏。如果寄存器可能损坏,则调用的函数可以覆盖而无需恢复,具体规则如下表所示:



例如一个函数foo(),被main()调用



函数foo()可以使用的寄存器,且不需要保存的寄存器是X0-X15,但如果foo()要使用X19-X28必须先将其保存到堆栈中,然后在返回之前从堆栈中恢复。


XR(X8)寄存器,是一个间接结果寄存器。如果返回一个结构体,那么foo()中结构体的内存将又调用者分配,指向调用者分配的用于返回结构体的内存指针。


IP0-IP1这些寄存器是过程调用中可以被破坏的寄存器,这些寄存器在函数被调用和执行调用函数第一条指令之间这段时间被破坏。链接器使用这些寄存器在调用者和被调用者之间插入胶合代码。最常见使用胶合代码的例子是A64的分支指令如果目标超出范围,则链接器需要生成一个胶合代码来扩展分支的范围。


FP(X29)帧指针。

LR(X30)函数调用链接寄存器。


1. 处理器状态

AArch64体系结构使用PSTAE(Processor state)寄存器来表示当前处理器状态。

2.1数据处理标志位

N:负数标志位,一个二进制补码,结果为负数则N=1;否则N=0;

Z:零标志位,如果结果为零,则Z=1;否则Z=0;

C:进位标志位,如果结果有进位,则C=1;否则C=0;

V:溢出标志位,如果结果有溢出,则V=1;否则V=0;

2.2异常掩码标志位

D:调试异常掩码位。

A:系统错误屏蔽位。

I:IRQ屏蔽位。

F:FIQ屏蔽位。

以上标志位,当为0是表示不屏蔽这个异常,当为1时表示屏蔽这个异常。

2.3运行状态

SS:软件单步。该位为1,表示在异常处理时使能了软件单步功能。

IL:非法执行状态位。

EL:当前异常等级。0:表示EL0;1:表示EL1;2:表示EL2;3:表示EL3;

nRW:当前执行状态。0:表示AArch64;1:表示AArch32;

SP:堆栈指针选择寄存器。0:表示选择SP0;1:表示SPx;


2. 特殊寄存器

3.1 零寄存器

零寄存器顾名思义,这些寄存器的内容全是0,可以用做源寄存器,也可以用作目标寄存器。WZR是32位的零寄存器,XZR是64位的零寄存器。


3.2 PC(Program Counter)程序指针寄存器

PC指针寄存器通常用来指向当前运行指令的下一条指令的地址,用于控制程序中指令的运行顺序,但编程人员不能通过指令来直接访问。


3.3 SP(Stack Pointer)堆栈指针寄存器

Armv8体系结构支持4个异常等级,每个等级都有一个专门的SP寄存器SP_ELn.

SP_EL0: EL0 下的栈指针寄存器

SP_EL1: EL1 下的栈指针寄存器

SP_EL2: EL2 下的栈指针寄存器

SP_EL3: EL3 下的栈指针寄存器


3.4 SPSR(Saved Program Status Register)备份程序状态寄存器

当我们运行一个异常处理程序时,处理器会把PSTATE寄存器的值暂时保存在备份程序状态寄存器(SPSR)里,当异常处理完成并返回时,再把SPSR的值恢复到PSTATE寄存器。


3.5 ELR(Exception Link Register)异常链接寄存器

ELR用于存放异常返回地址。


3. 系统寄存器


系统寄存器用于配置处理器和控制系统,例如MMU和异常处理。

数据处理或加载/存储指令不能直接使用系统寄存器。需要将系统寄存器的内容读入X寄存器,对其进行操作,然后再写回系统寄存器。


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


关于亿道电子

亿道电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。亿道电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。

欢迎关注“亿道电子”公众号

了解更多研发工具软件知识