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

相关推荐
爱吃香菜的初学者2 小时前
十四.Linux——消息队列
linux·运维·开发语言
Apipi*8 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP9 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC12 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding12 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK12 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil20812 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)12 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter62513 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
xh didida14 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++