好的,以下是按照键盘字母顺序(QWERTYUIOP ASDFGHJKL ZXCVBNM)整理的 ARMv8 (AArch64) 常用汇编指令列表。每个条目包含命令、解释和例子。
第一排:Q W E R T Y U I O P
Q
· 无常见指令
ARMv8 A64 指令集中没有以 Q 开头的通用整数指令。饱和运算指令通常以 SQ、UQ 开头,属于 S/U 类别。
W
· WFE
解释:等待事件(Wait For Event),进入低功耗状态,直到收到事件唤醒。
例子:WFE
· WFI
解释:等待中断(Wait For Interrupt),进入低功耗状态,直到收到中断唤醒。
例子:WFI
E
· EOR
解释:按位异或(Exclusive OR)。
例子:EOR X0, X1, X2 // X0 = X1 ^ X2
· ERET
解释:从异常返回(Exception Return),跳转到 ELR_ELx 保存的地址并恢复 PSTATE。
例子:ERET
R
· RET
解释:从子程序返回,默认使用 X30 (LR) 中的地址。
例子:RET
· REV
解释:字节序反转(Reverse Bytes),将寄存器中的字节顺序颠倒。
例子:REV X0, X1 // 将 X1 的字节顺序反转后存入 X0
T
· TST
解释:测试位(Test),执行 Rn & Rm/imm 并更新 NZCV 标志,不保存结果。
例子:TST X0, #0xFF // 测试 X0 的低 8 位是否全零
· TBZ
解释:测试位为零则跳转(Test Bit and Branch if Zero)。
例子:TBZ X0, #3, label // 如果 X0 的第 3 位为 0,跳转到 label
Y
· YIELD
解释:提示线程愿意让出 CPU 资源,用于多线程环境。
例子:YIELD
U
· UBFX
解释:无符号位域提取(Unsigned Bitfield Extract)。
例子:UBFX X0, X1, #4, #8 // 从 X1 的第 4 位开始提取 8 位,零扩展到 64 位后存入 X0
· UDIV
解释:无符号除法(Unsigned Divide)。
例子:UDIV X0, X1, X2 // X0 = X1 ÷ X2 (无符号)
I
· ISB
解释:指令同步屏障(Instruction Synchronization Barrier),清空流水线,确保之前指令完成。
例子:ISB
O
· ORR
解释:按位或(逻辑或)。
例子:ORR X0, X1, X2 // X0 = X1 | X2
· ORN
解释:先或后取反(OR NOT),即 Rn | (~Rm)。
例子:ORN X0, X1, X2 // X0 = X1 | (~X2)
P
· PRFM
解释:预取内存(Prefetch Memory),提示缓存预取数据。
例子:PRFM PLDL1KEEP, [X0] // 预取 X0 指向的内存到一级缓存
第二排:A S D F G H J K L
A
· ADD
解释:加法运算。
例子:ADD X0, X1, X2 // X0 = X1 + X2
· ADR
解释:将标签的地址(PC 相对)加载到寄存器。
例子:ADR X0, label // X0 = label 的地址
S
· SUB
解释:减法运算。
例子:SUB X0, X1, X2 // X0 = X1 - X2
· STR
解释:将寄存器值存储到内存。
例子:STR X0, [X1] // 将 X0 的值存入 X1 指向的内存
D
· DMB
解释:数据内存屏障(Data Memory Barrier),确保内存访问顺序。
例子:DMB ISH // 内部共享域的数据内存屏障
· DSB
解释:数据同步屏障(Data Synchronization Barrier),确保所有指令执行完成。
例子:DSB SY // 完全同步屏障
F
· FADD
解释:浮点数加法(单精度或双精度)。
例子:FADD D0, D1, D2 // D0 = D1 + D2 (双精度)
· FMOV
解释:浮点寄存器间传送,或浮点与通用寄存器间传送。
例子:FMOV X0, D0 // 将双精度浮点 D0 的位模式传送到 X0
G
· 无常见指令
A64 指令集中没有以 G 开头的通用指令。
H
· 无常见指令
A64 指令集中没有以 H 开头的通用指令。
J
· 无常见指令
A64 指令集中没有以 J 开头的通用指令。
K
· 无常见指令
A64 指令集中没有以 K 开头的通用指令。
L
· LDR
解释:从内存加载数据到寄存器。
例子:LDR X0, [X1] // 将 X1 指向的内存数据加载到 X0
· LDP
解释:加载一对寄存器(Load Pair)。
例子:LDP X0, X1, [X2] // 从 X2 指向的内存加载两个 64 位值到 X0 和 X1
第三排:Z X C V B N M
Z
· 无常见指令
A64 指令集中没有以 Z 开头的通用指令。
X
· 无常见指令
X 通常用作寄存器前缀,没有以 X 开头的指令。
C
· CMP
解释:比较指令,执行 Rn - Rm/imm 并更新 NZCV 标志。
例子:CMP X0, X1 // 比较 X0 和 X1
· CSEL
解释:条件选择(Conditional Select),根据标志选择两个源之一。
例子:CSEL X0, X1, X2, EQ // 如果相等 (Z=1),X0 = X1,否则 X0 = X2
V
· 无常见整数指令
浮点和 SIMD 指令通常以 F 或特定前缀开头,纯 V 开头的指令不常见。
B
· B
解释:无条件跳转。
例子:B label // 跳转到 label
· BL
解释:带链接的跳转(调用子程序),返回地址存入 X30。
例子:BL func // 调用 func,X30 = 返回地址
N
· NOP
解释:空操作(No Operation),占用一个周期。
例子:NOP
· NEG
解释:取反(Negate),即 Rd = -Rn。
例子:NEG X0, X1 // X0 = -X1
M
· MOV
解释:数据传送(实际是 ORR 或 ADD 的别名)。
例子:MOV X0, X1 // X0 = X1
· MUL
解释:乘法运算。
例子:MUL X0, X1, X2 // X0 = X1 * X2
以上列表涵盖了 ARMv8 A64 架构中按键盘字母顺序的常用指令。实际指令集非常庞大,但掌握这些基础指令足以应对大部分汇编编程任务。需要更详细的信息可参考 ARM 官方文档。