Arm——AArch64简介

AArch64 state的寄存器

寄存器分为一般寄存器和特殊寄存器,另外一些寄存器在特权执行模式下才能使用。

  • 31个64位的一般寄存器X0-X30,通过W0-W30访问其中的低32位.
  • 四个栈指针寄存器SP_EL0,SP_EL1,SP_EL2,SP_EL3.
  • 三个异常链接寄存器ELR_EL1,ELR_EL2,ELR_EL3.
  • 三个保存程序状态寄存器,SPSR_EL1,SPSR_EL2,SPSR_EL3.
  • 一个程序计数器PC.

除了三个程序状态寄存器SPSR是32位的,其他都是64位的。
没有W31或X31寄存器。取决于指令,寄存器31通常是栈寄存器或者零寄存器。当被用作栈寄存器时,用SP引用它,当用作零寄存器时,用WZR(32位)或XZR(64位)引用它。

Exception levels,异常级别

Armv8有4个异常级别,从EL0到EL3,EL3是最高的异常级别,有最高的执行权限。

  • EL0: 应用程序.
  • EL1: 操作系统内核.
  • EL2: Hypervisor,虚拟机监控器.
  • EL3: 安全模式,TrustZone.

当发生异常进入到更高的异常级别时,执行状态可以不变,也可以从AArch32变为AArch64.
当返回到更低的异常级别时,执行状态可以不变,也可以从AArch64变为AArch32.
异常级别只会在发生异常或从异常返回时改变。

Link registers,链接寄存器

在AArch64状态,Link Register(LR)存储了返回地址,实际映射到寄存器30,也可以被当做普通寄存器如果返回地址存到了栈里的话。LR与Exception Link Registers(ELRs)不同的是LR不分组,ELR是每个异常级别一个,除了EL0。
ELR_EL[1-3]分别对应相应的异常级别。当异常发生时,ELR寄存器中保存了被中断的代码的返回地址。如果异常是从AArch32状态来的,ELR的高32位都为0。异常级别相同的跳转使用LR保存返回地址。
例如当异常级别从EL0变为EL1时,返回地址存储在ELR_EL1中。
当进入一个异常级别时,如果开启了同一个异常级别的中断,必须保证ELR保存在栈中因为当中断发生时,ELR会被新的返回地址覆盖。

Stack Pointer register, 栈寄存器

SP_EL0是SP的别名,SP实际使用寄存器31。
只能在以下指令中使用SP作为一个操作数:

  • 作为加载和存储的基寄存器,在这种情况下,必须在添加任何偏移量之前对其进行四字对齐(Arm架构一个字是32位,4个字也就是128位,也就是16进制地址最低位必须为0),否则会发生堆栈对齐异常。
  • 作为算术指令的源或目标,但不能在设置条件标志(condition flags)的指令中用作目标。
  • 在逻辑指令中,例如为了对其。

三个异常级别中都有自己单独的栈指针,SP_EL[1-3],在每个异常级别中,既可使用自己专用的栈寄存器,也可以使用SP_EL0。可以使用SPSel寄存器来选择在当前异常级别中使用的栈指针。
栈指针的选择用附着在异常级别名字后面的小写字母th指定,例如EL0tEL3h。后缀t表明使用SP_EL0,后缀h表明使用SP_ELxx表示异常级别的数字。EL0只使用SP_EL0,所以它没有h后缀。

Program Count(PC,程序计数器) in AArch64 state

PC:当前执行指令的地址。它是由执行的指令的大小递增的,通常是四个字节。
在AArch64状态,PC不能被直接访问,下面这些指令隐式的访问它:

  • 计算PC相对地址的指令
  • PC相对地址的load
  • 直接分支(跳转)到PC相对的标签
  • Branch and link(BL)跳转指令,保存PC到LR.

能写PC的指令:

  • 条件和非条件分支
  • 异常产生和异常返回

分支指令加载目标地址到PC。

Conditional execution in AArch64 state

Condition flags

  • N:操作结果是负数置1,否则清0
  • Z:操作结果是零置1,否则清0
  • C:当操作结果导致了一个进位,或者减法结果没有借位时置1,否则清0
  • V:overflow溢出置1,否则清0

在AArch64状态,NZCV寄存器保存了N,Z,C,V条件标志的拷贝,保存在bits[31:28],处理器使用他们决定是否执行条件指令。
可以在任何异常级别访问条件标志,使用MRS(读)和MSR(写)。

Process State


版权声明:本文为hn2zzzz1996原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。