1、寄存器
常见寄存器
寄存器 | 别名 | 特殊用途 |
X0 | - | 函数返回值(整数/指针),也用于传递第一个参数。 |
X1-X7 | - | 函数参数传递(第 2 到第 8 个参数),多余的参数通过栈传递。 |
X8 | - | 间接返回值地址(如返回结构体时存放指针),或系统调用编号( 指令)。 |
X9-X15 | - | 临时寄存器,调用者保存(Caller-saved),函数内可随意使用。 |
X16-X17 |
/ | 内部过程调用临时寄存器(Intra-Procedure Call),可能被链接器使用。 |
X18 | - | 平台保留寄存器(如 macOS/iOS 用于 TLS 线程局部存储)。 |
X19-X28 | - | 被调用者保存(Callee-saved),函数必须保留它们的值。 |
X29 | FP | 帧指针(Frame Pointer),用于栈帧调试(可选项,部分优化会省略)。 |
X30 | LR | 链接寄存器(Link Register),存储函数返回地址( 指令设置)。 |
特殊寄存器
寄存器 | 别名 | 特殊用途 |
XZR | - | 零寄存器,读取始终为 0,写入无效(用于清零或比较)。 |
SP | - | 栈指针(Stack Pointer),指向当前栈顶(必须 16 字节对齐)。 |
PC | - | 程序计数器(Program Counter),不可直接修改,只能通过分支指令跳转。 |
2、跳转
常见跳转
| 直接跳转到标签(PC = label) | Branch(最基础的跳转) |
| 跳转并保存返回地址到 ( ) | Branch with Link(用于函数调用) |
| 跳转到寄存器 中的地址 | Branch to Register |
| 从函数返回(等效于 ) | RETurn(默认用 返回) |
条件跳转(基于标志位)
指令 | 条件 | 标志位 | 记忆技巧 |
| 相等(Equal) | Z=1 | EQual |
| 不等(Not Equal) | Z=0 | Not Equal |
| 有符号大于(Greater Than) | Z=0 & N=V | Greater Than |
| 有符号小于(Less Than) | N≠V | Less Than |
| 有符号大于等于(Greater or Equal) | N=V | Greater or Equal |
| 有符号小于等于(Less or Equal) | Z=1 | N≠V | Less or Equal |
| 无符号大于(Higher) | C=1 & Z=0 | Higher |
| 无符号小于(Lower) | C=0 | Lower |
标志位来源:
CMP X0, X1会计算X0 - X1,并设置标志位(N/Z/C/V)。
ARM64 常见汇编指令记忆方式
1. 数据传输
指令 | 作用 | 记忆技巧 |
| 寄存器复制 | MOVe |
| 从内存加载(Load) | LoaD Register |
| 存储到内存(Store) | StoRe |
| 加载双寄存器 | Load Pair |
| 存储双寄存器 | Store Pair |
2. 算术运算
指令 | 作用 | 记忆技巧 |
| 加法 | ADD |
| 减法 | SUBtract |
| 乘法 | MULtiply |
| 无符号除法 | Unsigned DIVide |
| 有符号除法 | Signed DIVide |
3. 逻辑运算
指令 | 作用 | 记忆技巧 |
| 按位与 | AND |
| 按位或 | OR |
| 按位异或 | Exclusive OR |
| 逻辑左移 | Logical Shift Left |
| 逻辑右移 | Logical Shift Right |