• aarch64-寄存器(持续更新)


    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 -------^
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 专用寄存器

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

    2.1 XZR寄存器

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

    // 将X1寄存器的值清零
    mov x1, xzr
    
    
    • 1
    • 2
    • 3

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

    mov x1, #0
    
    • 1

    在大多数情况下,使用 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
    
    • 1
    • 这个指令将 SPSel 寄存器的值设置为 1。
    • SPSel 寄存器的值为 1 表示选择使用 EL1 特权级别的堆栈指针(SP_EL1)。
    • 通常,这个指令会在从用户态(EL0)切换到内核态(EL1)时使用,以确保在内核态中使用正确的堆栈。
    MSR SPSel, #0
    
    • 1
    • 这个指令将 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. 系统寄存器

  • 相关阅读:
    前后端数据交互设计到的跨域问题
    ArrayList 源码分析
    【编程题】【Scratch四级】2019.12 太空大战
    Poco库使用:事件通知
    一个 不用充钱 也能让你变强的 VSCode 插件
    JSON介绍
    HTML+CSS静态网页设计:(房地产网站设计与实现6页)
    Java爬虫实战系列2——动手写爬虫初体验
    JavaWeb 学习笔记 1:MyBatis
    9月18日,每日信息差
  • 原文地址:https://blog.csdn.net/weixin_47139576/article/details/134033646