1. 寄存器
1.1. 通用寄存器
31 个R0~R30,每一个寄存器能够存取一个64位大小的数。 当使用 x0~x30访问时,是一个 64位的数;当使用 w0~w30访问时,是一个 32 位的数,访问的是寄存器的低32位,如下图所示:

1.2. 向量寄存器
(也可以叫做浮点寄存器)每一个寄存器的大小是 128 位的。 分别能够用Bn、Hn、Sn、Dn、Qn的方式来访问不一样的位数。如下图:

- Bn: 一个 Byte的大小,即
8位 - Hn: half word,即
16位 - Sn: single word,即
32位 - Dn: double word,即
64位 - Qn: quad word,即
128位
1.3. 特殊寄存器
- sp: (Stack Pointer),栈顶寄存器,用于保存栈顶地址;
- fp(x29): (Frame Pointer)为栈基址寄存,用于保存栈底地址;
- lr(x30): (Link Register) ,保存调用跳转指令
bl指令的下一条指令的内存地址; - zr(x31): (Zero Register),
xzr/wzr分别表明 64/32 位,其做用就是 0,写进去表明丢弃结果,读出来是0; - pc: 保存将要执行的指令的地址(有操做系统决定其值,不能改写)。
1.4. 状态寄存器
CPSR (Current Program Status Register)和其余寄存器不同,其余寄存器是用来存放数据的,都是整个寄存器具备一个含义;而 CPSR 寄存器是按位起做用的,即,每一位都有专门的含义,记录特定的信息;以下图数据结构

CPSR的 低8位(包括I、F、T和M[4:0]

本文详细解读了ARM64架构中的寄存器类型(通用、向量和特殊),函数调用约定,以及常用的汇编指令,包括mov、add、sub等,展示了如何在实际编程中操作寄存器和处理数据。
最低0.47元/天 解锁文章
3379

被折叠的 条评论
为什么被折叠?



