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

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)进一步提升速度。
相关推荐
西西弗Sisyphus18 分钟前
一个程序点击事件的汇编指令与解析 - 目标变量的真实虚拟地址 = 逐级解引用并叠加偏移后的结果
汇编
程序员陆业聪43 分钟前
将相和:一场战国时期的职场生存智慧
笔记
Aurora_eye1 小时前
【早年HTML笔记】
笔记
Trunktren1 小时前
PCB软硬结合板全流程设计
笔记·硬件工程·pcb设计·pcb工艺·allegro
li星野1 小时前
打工人日报#20251213
笔记
历程里程碑1 小时前
C++ 6 :string类:高效处理字符串的秘密
c语言·开发语言·数据结构·c++·笔记·算法·排序算法
YJlio1 小时前
桌面工具学习笔记(11.1):BgInfo——给服务器桌面“刻”上关键信息
服务器·笔记·学习
爱倒腾的老唐2 小时前
00、Altium Designer 23 使用问题记录
笔记·php
TL滕2 小时前
从0开始学算法——第十五天(滑动窗口)
笔记·学习·算法
八年。。2 小时前
Python 版本确认方法
开发语言·笔记·python