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

相关推荐
SkyXZ~1 小时前
Jetson有Jtop,Linux有Htop,RDK也有Dtop!
linux·运维·服务器·rdkx5·rdks100·dtop
starvapour3 小时前
Ubuntu系统下基于终端的音频相关命令
linux·ubuntu·音视频
杨云龙UP3 小时前
Oracle Data Pump实战:expdp/impdp常用参数与导入导出命令整理_20260406
linux·运维·服务器·数据库·oracle
浪客灿心3 小时前
线程同步与互斥
linux
牛马鸡niumasi5 小时前
C/C++ 程序编译过程、静态/动态链接、静态/动态库
linux
捧月华如6 小时前
Linux 系统性能压测工具全景指南(含工程实战)
linux·运维·服务器
YMWM_6 小时前
export MPLBACKEND=Agg命令使用
linux·python
想唱rap6 小时前
线程的同步与互斥
linux·运维·服务器·数据库·mysql
格林威7 小时前
SSD 写入速度测试命令(Linux)(基于工业相机高速存储)
linux·运维·开发语言·人工智能·数码相机·计算机视觉·工业相机
勇闯逆流河7 小时前
【LInux】linux控制(进程替换,自主shell的实现详解)
linux·运维·服务器