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

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)进一步提升速度。
相关推荐
夜流冰33 分钟前
GNU/Linux - tar命令
笔记
fcopy35 分钟前
GOLANG笔记第四周
笔记·golang
青石横刀策马1 小时前
Python学习笔记(1)装饰器、异常检测、标准库概览、面向对象
笔记·python·学习
跃渊Yuey1 小时前
【C++笔记】vector使用详解及模拟实现
c++·笔记
GIS 数据栈2 小时前
博客摘录「 pyqt 为新建子线程传参以及子线程返回数据到主线程」2023年12月7日
笔记·python·pyqt·多线程·多线程通信
yz-俞祥胜2 小时前
杨中科 .Net Core 笔记 DI 依赖注入2
笔记·.netcore
程序员劝退师_2 小时前
Vue学习笔记
vue.js·笔记·学习
zhuqiyua2 小时前
windows二进制安全零基础(二)
汇编·安全·二进制
祭の2 小时前
IDEA旗舰版编辑器器快速⼊门(笔记)
java·笔记·intellij-idea
尘佑不尘3 小时前
kali上安装docker,并且生成centos7容器和创建apache容器后台运行
笔记·web安全·docker·容器·apache