ARMv8架构详解:AArch64关键寄存器与异常处理

需积分: 49 103 下载量 191 浏览量 更新于2024-08-09 收藏 2.05MB PDF 举报
"该文档是AArch64架构在Scrapy官方手册中文版中的部分章节,主要涵盖了ARMv8架构的寄存器、执行状态、异常级别和异常处理逻辑等内容。" 在ARMv8架构中,AArch64模式引入了一系列重要的寄存器,这些寄存器对于理解和调试64位应用程序至关重要。以下是一些关键寄存器的详解: 1. **通用寄存器(X0-X30)**:这些是64位宽的通用寄存器,可作为32位寄存器使用(WO-W30)。它们用于存储数据和运算结果。 2. **LR (X30)**:程序链接寄存器,通常保存返回地址,以便于函数调用和返回。 3. **SP_ELx**:堆栈指针,根据异常级别(ELx)选择使用,如果PSTATE.M[0]为1,则使用SP_ELx,否则使用SP_EL0。 4. **ELR_ELx**:异常链接寄存器,记录异常进入ELx时的地址,有助于异常返回。 5. **PC (程序计数器)**:始终指向将要执行的下一条指令的地址。 6. **SPSR_ELx**:保存进入ELx时的处理器状态,包括标志信息。 7. **NZCV**:符号标志位,可访问的非零、进位、负数和溢出标志。 8. **DIAF**:中断使能位,控制调试、IRQ、SError和FIQ中断的状态。 9. **CurrentEL**:指示当前运行的异常级别。 10. **SPSel**:记录当前使用的SP_EL0或SP_ELx。 11. **HCR_EL2**:控制EL0/EL1的异常路由,包括TEG、AMO、IMO、FMO和RW位。 12. **SCR_EL3**:控制EL0/EL1/EL2的异常路由,如EA、IRQ、FIQ和RW位。 13. **ESR_ELx**:保存异常进入ELx时的综合信息,如异常类型EC。 14. **VBAR_ELx**:异常向量基地址寄存器,用于异常处理的跳转。 15. **PSTATE**:保存当前处理器状态的集合,包括NZCV、DAIF、CurrentEL和SPSel,是ARMv8对CPSR的扩展。 在64位操作系统运行32位应用程序时,64位和32位寄存器之间存在映射关系。例如,X0映射到R0,X20映射到LR_adt,X30 (LR)映射到LR_fiq,等等。 异常模型在ARMv8中扮演重要角色,异常分为不同类型,如IRQ、FIQ、SError和DataAbort。异常处理涉及特定的寄存器操作、路由控制和流程图,如IRQ和DataAbort的处理逻辑。异常进入时,会进行压栈操作,保存关键寄存器值,以便于恢复现场。 指令集方面,ARMv8包括64位的A64指令集和32位的A32/T32指令集。A64指令集提供了更高效的数据处理和控制流指令,如分支、数据处理、加载/存储以及异常管理和系统寄存器操作。 ARMv8架构通过其复杂的寄存器结构、异常处理机制和指令集,为64位和32位应用提供了高效且灵活的运行环境。