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

汇编常见指令

汇编常见指令


一、数据传送指令

指令功能示例说明
MOV数据传送MOV EAX, 10将立即数 10 送入 EAX
MOV [EBX], EAX将 EAX 值存入 EBX 指向的内存
LEA加载有效地址LEA EAX, [EBX+4]EBX+4 的地址存入 EAX(不访问内存)
XCHG交换数据XCHG EAX, EBX交换 EAX 和 EBX 的值
PUSH/POP栈操作PUSH EAX将 EAX 压入栈 POP EBX 弹出栈顶到 EBX

二、算术运算指令

指令功能示例
ADD加法ADD EAX, EBX ; EAX = EAX + EBX
SUB减法SUB AX, 5 ; AX = AX - 5
INC/DEC自增/自减INC ECX ; ECX++ DEC DL ; DL–
MUL无符号乘法MUL BL ; AX = AL * BL
IMUL有符号乘法IMUL CX ; DX:AX = AX * CX
DIV无符号除法DIV BX ; AX = (DX:AX) / BX
IDIV有符号除法IDIV CL ; AL = AX / CL

三、位操作指令

指令功能示例
AND按位与AND AL, 0xF0 ; 清零 AL 的低4位
OR按位或OR DX, 1 ; 设置 DX 的最低位为1
XOR按位异或XOR EAX, EAX ; 快速清零 EAX
NOT按位取反NOT BL ; BL = ~BL
SHL/SHR逻辑左移/右移SHL AX, 1 ; AX 左移1位(乘2)
SAL/SAR算术左移/右移SAR DX, 2 ; 有符号右移(除4)
ROL/ROR循环左移/右移ROL CL, 3 ; CL 循环左移3位

四、流程控制指令

1. 无条件跳转
指令功能
JMP跳转到指定地址JMP label
2. 条件跳转(基于标志位)
指令跳转条件说明
JE/JZZF=1相等/为零时跳转
JNE/JNZZF=0不等/非零时跳转
JG/JNLE(ZF=0) & (SF=OF)有符号大于时跳转
JL/JNGESF ≠ OF有符号小于时跳转
JA/JNBE(CF=0) & (ZF=0)无符号大于时跳转
JB/JCCF=1无符号小于/进位时跳转
3. 比较与测试
指令功能说明
CMP比较操作数CMP AX, BX ; 设置标志位(AX-BX)
TEST位测试TEST AL, 1 ; 检查 AL 最低位(AL & 1)
4. 循环控制
指令功能示例
LOOPECX 减1,非零则跳转LOOP label
LOOPEECX≠0 且 ZF=1 时跳转LOOPE label

五、函数调用指令

指令功能说明
CALL调用函数CALL func ; 压入返回地址后跳转
RET从函数返回RET ; 弹出返回地址并跳转

六、标志位操作

指令功能
STC设置进位标志 CF=1
CLC清除进位标志 CF=0
STD设置方向标志 DF=1(字符串操作从高地址向低地址)
CLD清除方向标志 DF=0(默认低→高)

七、字符串操作指令

指令功能说明
MOVSB移动字节串[EDI] ← [ESI],按 DF 更新 ESI/EDI
CMPSB比较字节串比较 [ESI][EDI],更新标志位
SCASB扫描字节串比较 AL 和 [EDI],常用于搜索字符
LODSB加载字节到 ALAL ← [ESI], ESI++
STOSB存储 AL 到字节串[EDI] ← AL, EDI++

🔥 提示:搭配前缀 REP(如 REP MOVSB)可重复执行至 ECX=0。


八、系统调用指令

架构指令功能
x86 (Linux)INT 0x80触发系统调用(参数通过 EAX/EBX/ECX 传递)
x86-64SYSCALL64位系统调用(参数:RAX/RDI/RSI/RDX)
WindowsINT 0x2EWindows NT 系统调用

关键注意点

  1. 操作数大小
    • MOV AL, BL(8位) vs MOV AX, BX(16位) vs MOV EAX, EBX(32位)
  2. 内存访问格式
    • 直接寻址:MOV EAX, [0x4000]
    • 寄存器间接:MOV CL, [ESI]
    • 带偏移:MOV DX, [EBX+8]
  3. AT&T vs Intel 语法
    • Intel:MOV EAX, DWORD PTR [EBX]
    • AT&T:movl (%ebx), %eax(目标在后)

经典代码片段

section .datamsg db 'Hello World!', 0xA  ; 定义字符串section .text
global _start
_start:MOV EAX, 4      ; sys_write 系统调用号MOV EBX, 1      ; 文件描述符 (stdout)MOV ECX, msg    ; 字符串地址MOV EDX, 13     ; 字符串长度INT 0x80        ; 调用内核MOV EAX, 1      ; sys_exitXOR EBX, EBX    ; 返回码 0INT 0x80

相关文章:

  • 如何高效的组织产品研发团队与产品交付开发团队
  • 【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
  • 等待组(waitgroup)
  • MySQL自定义函数零基础学习教程
  • 销售心得分享
  • ip子接口配置及删除
  • Clean Code 学习总结01 - 物理设计与命名艺术
  • 打开GitHub网站因为网络原因导致加载失败问题解决方案
  • 选取货物 - 题解(0-1背包问题)
  • Python学习(8) ----- Python的类与对象
  • Shellshock漏洞与永恒之蓝(WannaCry)勒索病毒深度分析
  • 记录:外扩GPIOD访问报警告
  • 嵌入式学习Day34
  • DAY 26 函数专题1
  • (每日一道算法题)子集
  • 智能SQL优化工具PawSQL月度更新 | 推出免费私域部署社区版
  • Day09_刷题niuke20250609
  • 高保真组件库:上传
  • 问题复盘-当前日志组损坏问题
  • 源雀Scrm开源版:AI客服会话总结 功能发布
  • 生物医药网站建设/广州seo推广服务
  • 一个完整的企业网站怎么做/公司企业员工培训
  • wordpress 非插件分页/简述优化搜索引擎的方法
  • 网站的推广方案怎么写/优化用户体验
  • wordpress修改固定连接404/搜索引擎优化报告
  • 淮安市做网站的公司/免费发广告的平台