当前位置: 首页 > news >正文

x86-64 汇编指令详细参考手册

目录
  • 数据传送指令
    • MOV - 数据传送
    • LEA - 加载有效地址
  • 算术运算指令
    • ADD/SUB - 加减法
    • IMUL - 有符号乘法
    • SAR - 算术右移
  • 逻辑运算指令
    • OR - 按位或
    • XOR - 按位异或
    • TEST - 逻辑测试
  • 控制转移指令
    • CALL - 调用子程序
    • Jcc - 条件跳转
  • 栈操作指令
    • PUSH/POP
  • 系统调用指令
    • SYSCALL
  • REP STOSQ - 块存储
  • 内存操作数寻址模式
  • 指令集特点总结


数据传送指令


MOV - 数据传送

格式MOV 目标, 源
功能:将源操作数复制到目标操作数
操作数类型

  • 寄存器到寄存器
  • 立即数到寄存器
  • 内存到寄存器(加载)
  • 寄存器到内存(存储)

示例

mov rax, rbx        ; 寄存器到寄存器
mov [rsp], rdx      ; 寄存器到内存
mov ecx, 42         ; 立即数到寄存器
mov rdx, [rsi+8]    ; 内存到寄存器

标志位影响:不影响任何标志位


LEA - 加载有效地址

格式LEA 目标, 源
功能:计算源操作数的有效地址(不访问内存),结果存入目标
特点:常用于地址计算和算术运算优化

示例

lea rax, [rbx+rcx*8+20h]  ; 计算复杂地址
lea rsi, [rel data_area]  ; 获取相对地址

标志位影响:不影响任何标志位


算术运算指令


ADD/SUB - 加减法

格式ADD/SUB 目标, 源
功能:执行加法/减法运算,结果存入目标

示例

add rsp, 40h        ; 栈指针调整
sub eax, ebx        ; 32位减法

标志位影响:OF, SF, ZF, AF, CF, PF


IMUL - 有符号乘法

格式

  • IMUL 目标(单操作数,隐含使用RAX)
  • IMUL 目标, 源(双操作数)
  • IMUL 目标, 源, 立即数(三操作数)

示例

imul rdx        ; RDX:RAX = RAX * RDX
imul rbx, rcx   ; RBX = RBX * RCX
imul rsi, rdi, 5 ; RSI = RDI * 5

标志位影响:OF, CF(其他未定义)


SAR - 算术右移

格式SAR 目标, 计数
功能:带符号扩展的右移(最高位补符号位)

示例

sar rax, 3      ; RAX算术右移3位
sar byte [rdi], 1 ; 内存操作数右移

标志位影响:OF, SF, ZF, AF, CF, PF


逻辑运算指令


OR - 按位或

格式OR 目标, 源
功能:按位或运算,结果存入目标

示例

or rax, rbx     ; 寄存器或运算
or [rsp], rdx   ; 内存或运算

标志位影响:OF=0, SF, ZF, AF=未定义, CF=0, PF


XOR - 按位异或

格式XOR 目标, 源
功能:按位异或运算,常用于清零寄存器

示例

xor eax, eax    ; 快速清零EAX
xor [rdi], rsi  ; 内存异或运算

标志位影响:OF=0, SF=0, ZF, AF=未定义, CF=0, PF


TEST - 逻辑测试

格式TEST 操作数1, 操作数2
功能:执行按位与运算并设置标志位,不保存结果

示例

test rax, rax   ; 检查RAX是否为0
test [rbx], 1   ; 测试最低位

标志位影响:OF=0, SF, ZF, AF=未定义, CF=0, PF


控制转移指令


CALL - 调用子程序

格式CALL 目标
功能:将返回地址压栈并跳转到目标地址

示例

call _printf    ; 调用外部函数
call [rax+8]    ; 通过指针调用

栈操作PUSH RIP(64位返回地址)


Jcc - 条件跳转

格式Jcc 目标
常见条件

  • JLE:小于等于跳转(SF≠OF或ZF=1)
  • JE/JZ:等于/为零跳转
  • JNE/JNZ:不等于/非零跳转
  • JG/JNLE:大于跳转

示例

jle short loc_1234  ; 条件跳转

栈操作指令


PUSH/POP

格式PUSH 源 / POP 目标
功能:压栈/出栈操作(64位模式下操作8字节)

示例

push rbp        ; 保存帧指针
pop rax         ; 恢复寄存器

栈指针变化:每次操作RSP±8


系统调用指令


SYSCALL

格式SYSCALL
功能:快速系统调用(替代传统的INT 80h)

寄存器使用

  • RAX:系统调用号
  • RDI, RSI, RDX, R10, R8, R9:参数
  • RCX和R11被破坏

REP STOSQ - 块存储

格式REP STOSQ
功能:重复将RAX的值存储到RDI指向的内存

寄存器使用

  • RDI:目标地址
  • RCX:计数
  • RAX:存储的值

示例

xor eax, eax
mov rdi, rsp
mov rcx, 16
rep stosq       ; 清零128字节栈空间

内存操作数寻址模式

通用格式
[基址 + 索引*比例因子 + 位移]

示例

mov rax, [rsp+rbx*8+1c8h]  ; 复杂寻址
lea rdx, [rsi+rdi*4]       ; 地址计算

比例因子:1, 2, 4, 8(对应字节、字、双字、四字)


指令集特点总结

  1. 寄存器使用

    • 16个通用寄存器(RAX-R15)
    • 专用寄存器:RSP(栈指针)、RBP(帧指针)、RIP(指令指针)
  2. 操作数顺序

    • Intel语法:目标在前,源在后
    • 与AT&T语法相反
  3. 内存引用

    • 必须用[]明确表示
    • 支持复杂寻址模式
  4. 数据类型

    • 支持1(byte)、2(word)、4(dword)、8(qword)字节操作
    • 通过指令后缀或寄存器名称隐含
  5. 调用约定

    • System V AMD64 ABI:
      • 整数参数:RDI, RSI, RDX, RCX, R8, R9
      • 浮点参数:XMM0-XMM7
      • 返回值:RAX/RDX

这套指令集组合实现了从基本的算术运算到复杂的内存操作,能够高效地实现高级语言的各种功能。在您分析的代码中,这些指令被巧妙地组合使用来实现Reactor模式的核心功能。

http://www.sczhlp.com/news/8098/

相关文章:

  • Jaeger 分布式追踪 系统详解
  • 给域名加SSL证书步骤
  • iZotope RX 11 mac+win安装包
  • AD7616的国产代替兼容料——LHA6916
  • 盒马面试 记录 3 面 + hr 面
  • 表格数据深度学习算法NODE技术解析
  • OpenCV入门(12):OpenCV与Qt联合实现的图片浏览器
  • 机器学习之线性回归。
  • 大模型性能测试完全指南:从原理到实践
  • 快速写出一个截图网页的爬虫程序
  • GPT-5发布:ModelGate率先支持,探索新一 代AI模型的强大功能
  • Typora 设置锚点跳转
  • 【UDK2018】环境配置
  • 电商行业绩效考核的一般性建议
  • 洛谷P9838 挑战 NPC IV
  • SQLERP——通过品号递归BOM往上找到最top的主件
  • 避开坑点:开发者调用LLM API的10个最佳实践
  • VSFTPD的标准配置
  • 零代码打造自定义地形~地表中的地形设置
  • vscode通过remote-ssh远程连接虚拟机中的服务器【错误应对】2025-8-5
  • Web开发--基础知识
  • 可视化集成平台综述
  • CF 思维题
  • ArcGIS 经验
  • java环境变量设置
  • 刚刚,GPT-5 炸裂登场!可免费使用
  • Pod的创建,删除,修改流程:
  • 开发并发布一个简单npm包的整个流程
  • 详细介绍:202506 电子学会青少年等级考试机器人六级实际操作真题
  • safari内核钉钉版本7.0及以上 英文引号自动变为中文