语法:操作码/指令/助记符 目标操作数(operand),源操作数
立即数(IM):不是寄存器或内存地址,硬编码常量数据;如5,10等
registry:寄存器,存储指针或数据(cpu内)
- 内存地址:如0x7FFF842B.
常用指令:
mov,
LEA is short for Load Effective Address
push
POP
INC
DEC
ADD:add RAX, RBX
SUB:sub RAX, RBX
乘除: 上半部分存在RDX,下半部分在RAX;RDX:RAX;mul(无符号),imul(有符号);div,idiv
- 流程控制: RET is short for return,
mov RAX, 10 ret ;等价于return 10;CMP(compare),JCC instructions(conditional jumps,基于flags):有JNE, JLE, JNZ...(对应高级语言中的IF);NOP 如mov RAX, 25 mov RBX, 5 mul RBX ; Multiplies RAX (25) with RBX (5)
mov RAX, 18
mov RBX, 3
div RBX ; Divides RAX (18) by RBX (3)
区别:
- ✅ mov rax, [struct+8] 先计算地址 struct起始地址 + 8,再读取该内存地址里存储的值送入 rax。
- ✅ lea rax, [struct+8] lea 不会解引用!只单纯计算有效地址。
pointers
关键符号
- []:解引用即如[var],访问指针var在内存中保存的值
- LEA :[]在其中不解引用
例子
zero extension零扩展
-
mov eax, 0x1234
CPU自动将高32位归零,最终完整 64 位 RAX = 0x000000001234;但写入16位/8位子寄存器不会自动零扩展
JMP's Mason(跳转临界边界问题)
rax = struct起始地址 + 8,得到偏移 8 字节的成员地址,不取内存数据。




Top comments (4)
R8、R9 是 x86-64(AMD64)新增通用寄存器
用R8举例,R9相同:
R8:64 位完整寄存器
R8D:低 32 位(写入会自动清空高 32 位)
R8W:低 16 位
R8B:最低 8 位