【无标题】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 官方文档。

相关推荐
一直会游泳的小猫26 分钟前
homebrew
linux·mac·工具·包管理
寒秋花开曾相惜35 分钟前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
狂奔的sherry40 分钟前
一次由 mount 引发的 Linux 文件系统“错觉”
linux·运维·服务器
小黑要努力1 小时前
智能音箱遇到的问题(一)
linux·运维·git
ch3nyuyu1 小时前
静态库和动态库的制作
linux·运维·开发语言
一口Linux2 小时前
Linux C编程 | 从0实现telnet获取程序终端控制权
linux·运维·c语言
willhuo2 小时前
Certbot工具在CentOS 7.9上申请和配置SSL证书完整教程
linux·centos·ssl
zhangrelay3 小时前
三分钟云课实践速通--大学物理--python 版
linux·开发语言·python·学习·ubuntu·lubuntu
风翼靓崽4 小时前
linux命令杂记 - 杂乱无章
linux·运维·服务器
handler014 小时前
Linux 进程探索:从 PCB 管理到 fork() 的写时拷贝
linux·c语言·c++·笔记·学习