【无标题】arm v8 速记

好的,以下是按照键盘字母顺序(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 官方文档。

相关推荐
sagima_sdu2 小时前
主流开源大模型架构全景
大数据·linux·人工智能
Darth Nihilus2 小时前
Raspberry Pi Compute Module Zero Development Board开发板(四)
linux·嵌入式硬件
Xzq2105092 小时前
Reactor模式
linux·网络
小鸡吃米…2 小时前
Python 中的并发 —— 进程池
linux·服务器·开发语言·python
星辰引路-Lefan2 小时前
全平台 Docker 部署 CPA(CLIProxyAPI Plus) 灵活定制指南 (Linux/Windows)——接入Codex
linux·windows·docker·ai·ai编程
历程里程碑2 小时前
40 UDP - 2 C++实现英汉词典查询服务
linux·开发语言·数据结构·c++·ide·c#·vim
程序设计实验室2 小时前
别再手动复制SSH公钥了,Linux服务器一键从GitHub快速导入公钥
linux
雾岛听蓝2 小时前
动静态库原理与ELF文件详解
linux·经验分享·笔记
枕布响丸辣3 小时前
Nginx 安全防护与 HTTPS 部署实战
linux·运维·服务器·系统安全