ARM汇编编程(AArch64架构)课程 - 第1章:AArch64架构基础

目录

1. 寄存器组

通用寄存器

寄存器 位宽 用途说明
X0-X7 64位 函数参数传递/返回值
X8 64位 间接结果寄存器
X9-X15 64位 临时寄存器
X16-X17 64位 平台保留(IP0/IP1)
X18 64位 平台保留寄存器
X19-X28 64位 被调用者保存寄存器
X29 64位 帧指针(FP)
X30 64位 链接寄存器(LR)
SP 64位 栈指针
PC 64位 程序计数器(不可直接访问)

特殊寄存器

  • PSTATE :处理器状态寄存器(组合寄存器)
    • NZCV:条件标志位(Negative/Zero/Carry/oVerflow)
    • DAIF:中断屏蔽位
    • CurrentEL:当前异常级别
    • SPSel:栈指针选择(SP_EL0/SP_ELx)

2. 执行状态与异常级别

AArch64 vs AArch32

特性 AArch64 AArch32
寄存器 31个64位通用寄存器 16个32位通用寄存器
指令集 A64 A32/T32(Thumb)
地址空间 64位虚拟地址 32位虚拟地址
异常模型 4个异常级别(EL0-EL3) 特权模式+监控模式
SIMD 128位NEON寄存器 64/128位NEON寄存器

异常级别(EL)

级别 名称 典型用途
EL0 用户模式 应用程序执行
EL1 操作系统内核 Linux/Windows内核
EL2 虚拟机监控器 Hypervisor(如KVM)
EL3 安全监控器 TrustZone安全世界切换

关键转换机制

  • Interprocessing :AArch64与AArch32状态切换

    • 通过ERET指令和异常级别改变触发
    • 由系统寄存器SCTLR_ELx控制
  • 异常级别切换

    armasm 复制代码
    // 从EL1切换到EL0示例
    MSR     SP_EL0, X0      ; 设置EL0栈指针
    MOV     X0, #0x3C5      ; DAIF=0 (启用中断)
    MSR     SPSR_EL1, X0    ; 设置返回状态
    ADR     X0, target_el0  ; 目标地址
    MSR     ELR_EL1, X0     ; 设置返回地址
    ERET                    ; 执行切换