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

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)进一步提升速度。
相关推荐
我爱挣钱我也要早睡!1 小时前
Java 复习笔记
java·开发语言·笔记
汇能感知5 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun6 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao6 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾6 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT7 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
ST.J7 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin7 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
小憩-8 小时前
【机器学习】吴恩达机器学习笔记
人工智能·笔记·机器学习
UQI-LIUWJ8 小时前
unsloth笔记:运行&微调 gemma
人工智能·笔记·深度学习