1、寄存器

常见寄存器

寄存器

别名

特殊用途

X0

-

函数返回值(整数/指针),也用于传递第一个参数。

X1-X7

-

函数参数传递(第 2 到第 8 个参数),多余的参数通过栈传递。

X8

-

间接返回值地址(如返回结构体时存放指针),或系统调用编号(svc

指令)。

X9-X15

-

临时寄存器,调用者保存(Caller-saved),函数内可随意使用。

X16-X17

IP0

/IP1

内部过程调用临时寄存器(Intra-Procedure Call),可能被链接器使用。

X18

-

平台保留寄存器(如 macOS/iOS 用于 TLS 线程局部存储)。

X19-X28

-

被调用者保存(Callee-saved),函数必须保留它们的值。

X29

FP

帧指针(Frame Pointer),用于栈帧调试(可选项,部分优化会省略)。

X30

LR

链接寄存器(Link Register),存储函数返回地址(BL

指令设置)。

特殊寄存器

寄存器

别名

特殊用途

XZR

-

零寄存器,读取始终为 0,写入无效(用于清零或比较)。

SP

-

栈指针(Stack Pointer),指向当前栈顶(必须 16 字节对齐)。

PC

-

程序计数器(Program Counter),不可直接修改,只能通过分支指令跳转。

2、跳转

常见跳转

B <label>

直接跳转到标签(PC = label)

Branch(最基础的跳转)

BL <label>

跳转并保存返回地址到 LR

LR = PC + 4

Branch with Link(用于函数调用)

BR <Xn>

跳转到寄存器 Xn

中的地址

Branch to Register

RET

从函数返回(等效于 BR X30

RETurn(默认用 LR

返回)

条件跳转(基于标志位)

指令

条件

标志位

记忆技巧

B.EQ

相等(Equal)

Z=1

EQual

B.NE

不等(Not Equal)

Z=0

Not Equal

B.GT

有符号大于(Greater Than)

Z=0 & N=V

Greater Than

B.LT

有符号小于(Less Than)

N≠V

Less Than

B.GE

有符号大于等于(Greater or Equal)

N=V

Greater or Equal

B.LE

有符号小于等于(Less or Equal)

Z=1 | N≠V

Less or Equal

B.HI

无符号大于(Higher)

C=1 & Z=0

Higher

B.LO

无符号小于(Lower)

C=0

Lower

标志位来源

  • CMP X0, X1 会计算 X0 - X1,并设置标志位(N/Z/C/V)。

ARM64 常见汇编指令记忆方式

1. 数据传输

指令

作用

记忆技巧

MOV X0, X1

寄存器复制

MOVe

LDR X0, [X1]

从内存加载(Load)

LoaD Register

STR X0, [X1]

存储到内存(Store)

StoRe

LDP X0, X1, [X2]

加载双寄存器

Load Pair

STP X0, X1, [X2]

存储双寄存器

Store Pair

2. 算术运算

指令

作用

记忆技巧

ADD X0, X1, X2

加法

ADD

SUB X0, X1, X2

减法

SUBtract

MUL X0, X1, X2

乘法

MULtiply

UDIV X0, X1, X2

无符号除法

Unsigned DIVide

SDIV X0, X1, X2

有符号除法

Signed DIVide

3. 逻辑运算

指令

作用

记忆技巧

AND X0, X1, X2

按位与

AND

ORR X0, X1, X2

按位或

OR

EOR X0, X1, X2

按位异或

Exclusive OR

LSL X0, X1, #4

逻辑左移

Logical Shift Left

LSR X0, X1, #4

逻辑右移

Logical Shift Right