ARM架构基础(三)
文章目录
- ARM架构基础(三)
-
- 7、AArch64 执行状态
-
- 7.3 程序计数器
- 7.4 堆栈指针
- 7.5 零寄存器
- 7.6 链接寄存器
- 7.7 帧指针
- 7.8 平台寄存器 (x18)
- 7.9 过程内调用寄存器
- 7.10 SIMD 和浮点寄存器
- 7.11 系统寄存器
- 7.13 PSTATE
7、AArch64 执行状态
7.3 程序计数器
程序计数器寄存器 PC 保存当前指令的地址。从概念上讲,每条指令在执行前都会从 PC 引用的内存位置加载。除非 PC 在指令的正常执行过程中被明确更改(例如通过分支指令),否则 PC 会自动前进到下一条指令。在 Armv8 中,PC 不能直接访问,也不能指定为加载或数据处理指令的目标。PC 只能通过异常生成、异常返回和分支指令进行明确更新。
可以读取 PC 的普通指令如下:
- 带链接指令的分支(BL、BLR),这些指令需要读取 PC 以将返回地址存储在链接寄存器 (LR) 中。
- PC 指令:相对地址生成,例如 ADR 和 ADRP、直接分支和字面量加载
7.4 堆栈指针
堆栈指针寄存器 SP 跟踪当前线程的堆栈位置,通常指向当前线程堆栈的逻辑“顶部”。程序使用堆栈区域来高效地存储和访问给定函数的局部变量数据,并将其用作通用“临时”存储器,用于存储函数返回地址等数据。
在 AArch64 中,SP 是一个特殊寄存器,大多数指令无法像使用通用寄存器那样引用它。读写 SP 的唯一方法是通过专用指令形式。例如,可以使用算术 ADD 或 SUBTRACT 指令形式在函数的起始或结束阶段修改 SP。SP 还有一个 32 位“视图”,称为 WSP,尽管在实际的逆向工程中很少遇到。
在AArch64架构中,SP寄存器