汇编代码中的主要指令笔记

1. MOV 指令

功能:用于将数据从一个位置传输到另一个位置,可以是寄存器或内存地址。

语法mov 目标, 源

示例

assembly 复制代码
mov eax, 0FFFFFFFFh   ; 将立即数 0xFFFFFFFF 传送到 eax 寄存器
mov edi, offset target ; 将 target 地址存入 edi,用于目标位置

2. REP 前缀

功能 :用来重复执行后面的字符串指令,直到 ECX 寄存器的值为 0。可以结合 MOVS, STOS, CMPS, SCAS 等串操作指令,实现对内存数据的批量操作。

语法rep 指令

示例

assembly 复制代码
mov ecx, 20           ; 设置重复次数
rep stosd             ; 重复 20 次,将 EAX 的值存入 EDI 指向的目标内存

3. STOSD 指令

功能 :将 EAX 寄存器中的双字(DWORD)值存储到 ES:EDI 指向的内存地址,然后根据方向标志位 DF 更新 EDI

语法stosd

示例

assembly 复制代码
mov eax, 0FFFFFFFFh   ; 将要存储的值 0xFFFFFFFF 加载到 EAX
mov edi, offset target ; 将 target 地址加载到 EDI
mov ecx, 20           ; 设置重复计数
rep stosd             ; 重复存储 20 次,将 EAX 中的数据存到 target 的每个双字地址

4. LODS 系列指令

功能 :将 DS:ESI 指向的内存数据加载到累加器(AL, AX, EAX, RAX),常用于从源内存块读取数据。 LODS 系列有多个变体:

  • lodsb 加载字节到 AL
  • lodsw 加载字到 AX
  • lodsd 加载双字到 EAX
  • lodsq 加载四字到 RAX

示例

assembly 复制代码
mov esi, offset source ; 将 source 地址加载到 ESI
lodsd                  ; 从 source 处读取双字,加载到 EAX

5. MOVS 系列指令

功能 :将 DS:ESI 指向的源内存数据复制到 ES:EDI 指向的目标内存数据块,通常用于字符串或数组的复制操作。MOVS 系列也有不同大小的变体:

  • movsb 复制字节
  • movsw 复制字
  • movsd 复制双字
  • movsq 复制四字

示例

assembly 复制代码
mov esi, offset source ; 源数据地址
mov edi, offset target ; 目标数据地址
mov ecx, 20           ; 复制 20 个双字
rep movsd             ; 从 source 复制 20 个双字到 target

6. CMPS 系列指令

功能 :比较 DS:ESIES:EDI 指向的内存内容,并根据比较结果设置标志位。CMPS 系列指令有多个大小的变体,用于不同的数据宽度:

  • cmpsb 比较字节
  • cmpsw 比较字
  • cmpsd 比较双字
  • cmpsq 比较四字

示例

assembly 复制代码
mov esi, offset dwSourceC ; 源数据地址
mov edi, offset dwTarget   ; 目标数据地址
cmpsd                      ; 比较 dwSourceC 和 dwTarget 的双字内容

补充知识点

DF 方向标志位

DF 控制串指令中 SIDI 寄存器的更新方向。可以通过 CLD 清除 DF(递增)或 STD 设置 DF(递减)。

重复前缀的种类
  • REP:无条件重复,直到 ECX 为 0。
  • REPE/REPZ:当 ZF 为 1 时重复,直到 ECX 为 0 或 ZF 为 0。
  • REPNE/REPNZ:当 ZF 为 0 时重复,直到 ECX 为 0 或 ZF 为 1。

使用建议

  1. 数据对齐和方向 :在使用 STOS, MOVS, CMPS 等指令时,确保数据对齐;使用 CLDSTD 指令控制方向。
  2. 注意内存边界:在操作大数据块时,小心避免越界访问。
  3. 性能优化:大数据块操作可以结合 SIMD 指令(如 AVX)进一步提升速度。
相关推荐
Fa_Mian_Tuan10 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
FakeOccupational11 小时前
【电路笔记 STM32】stm32f103 实现HAL_UART_Transmit_DMA + 普通模式/连续模式的 UART DMA 收发
笔记·stm32·嵌入式硬件
典典分享指南12 小时前
用指纹算法给文章去重:mid_signature 实战
jvm·maven·intellij-idea·jetty
北京海得康12 小时前
DMD基因治疗deramiocel遭FDA质疑,Ultragenyx DTX401即将获批
笔记
zjnlswd13 小时前
C#学习笔记2 刘铁锰
笔记·学习
Mr_liu_66613 小时前
Claude非专业入门实战笔记(4):Claude运行方式简单解析——从RAG到代理循环
笔记·ai编程·claude
凯尔萨厮13 小时前
Git(学习笔记)
笔记·git·学习
蒸蒸yyyyzwd13 小时前
cpp选手备注秋招 MySQL学习笔记 day8
笔记·学习·求职招聘
AI直播技术杂谈13 小时前
本周技术笔记:直播推流的心跳检测与断线重连逻辑
笔记
九硕智慧建筑一体化厂家13 小时前
从照明节能到碳排可见:能碳平台助力机房迈向 “零碳” 未来
运维·笔记·智慧城市