aarch64-寄存器(持续更新)

本文详细介绍了ARM处理器中的通用寄存器(X0~X30、Wn、Rn)和专用寄存器(如XZR、SP、SPSR、ELR、SPSel等),以及它们在程序执行中的作用,特别是栈寄存器在特权级别切换和异常处理中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 通用寄存器

31个64位通用寄存器(X0~X30)

  • 64位:Xn(n的范围是0~30)
  • 32位:Wn(n的范围是0~30)
  • 32/64位:Rn(n的范围是0~30)
63       32 31      0
----------------------
|          |         |
|          |         |
----------------------
           ^--- Wn ---^
^--------- Xn -------^

2. 专用寄存器

  • XZR:zero register
  • SP:栈寄存器
  • PC:程序计数器
  • SPSR:程序状态寄存器
  • ELR:exception link register

2.1 XZR寄存器

XZR 寄存器在汇编代码中通常用作一个通用的"无操作"或"清零"寄存器,用于初始化变量或执行其他不需要返回值的操作。例如,你可以将 XZR 寄存器的值设置为零,然后将其用于将某个寄存器清零,如下所示:

// 将X1寄存器的值清零
mov x1, xzr

在这个示例中,mov x1, xzr 将 X1 寄存器的值设置为零。
也可以使用 mov 指令将寄存器直接设置为零,就像这样:

mov x1, #0

在大多数情况下,使用 XZR 寄存器和使用 mov 指令将寄存器设置为零没有显著的性能差异。它们都可以有效地将寄存器的值设置为零。

2.2 SP栈寄存器

系统中有如下与栈相关寄存器

  • SP
  • SPsel
  • SP_EL0
  • SP_EL1
  • SP_EL2
  • SP_EL3

2.2.1 sp

  • SP 是通常的堆栈指针,用于指示当前线程或进程的用户态或系统态堆栈。
  • 用户态堆栈和系统态堆栈都使用相同的 SP 寄存器。
  • 当处理普通函数调用或一般指令时,SP 用于堆栈操作。

2.2.2 SPSel

  • SPSel 是一个特殊的系统寄存器,用于在处理异常或中断时选择堆栈指针。
  • SPSel 寄存器允许内核选择使用不同的堆栈指针来处理异常或中断,通常用于实现特权级别切换时。
  • 通过设置 SPSel 寄存器的不同值,内核可以在不同特权级别之间切换堆栈,以确保在特权级别切换时不会混淆堆栈。
  • 这有助于提高系统的安全性和稳定性,特别是在处理异常和中断时。
MSR SPSel, #1
  • 这个指令将 SPSel 寄存器的值设置为 1。
  • SPSel 寄存器的值为 1 表示选择使用 EL1 特权级别的堆栈指针(SP_EL1)。
  • 通常,这个指令会在从用户态(EL0)切换到内核态(EL1)时使用,以确保在内核态中使用正确的堆栈。
MSR SPSel, #0
  • 这个指令将 SPSel 寄存器的值设置为 0。
  • SPSel 寄存器的值为 0 表示选择使用当前特权级别的堆栈指针(SP)。
  • 通常,这个指令会在从内核态(EL1)切换回用户态(EL0)时使用,以确保在用户态中使用正确的堆栈。

2.2.3 SP_EL1

  • SP_EL1 是 EL1 特权级别的堆栈指针。
  • 用于保存 EL1 特权级别的堆栈,通常用于处理来自用户态到内核态的异常和中断。
  • 当进入异常处理程序时,SP 的值会自动保存到 SP_EL1。
  • 当从异常处理程序返回时,SP_EL1 的值会被恢复到 SP。

2.2.4 SP_EL3

  • SP_EL3 是 EL3 特权级别的堆栈指针。
  • 通常用于引导启动和安全处理。
  • 当处于EL3特权级别时,SP 的值会自动保存到 SP_EL3。
  • 当从EL3返回到EL2或EL1时,SP_EL3 的值会被恢复到SP_EL2或SP_EL1。

2.3 DAIF

CurrentEL

3. 系统寄存器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天选码农搬砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值