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

汇编指令补充

CALL 过程调用指令

格式
CALL 目标地址/标签
执行逻辑(32 位)

  1. 保存返回地址(CALL 下一条指令的地址)
    入栈:ESP = ESP - 4MOV SS:[ESP], EIP (存入返回地址)
  2. 跳转到目标地址执行:EIP = 目标地址
    作用
    调用子程序 / 函数,执行完可通过RET回到原位置

RET 返回指令

格式
RET
执行逻辑(32 位)

  1. 从栈中取出返回地址,赋值给指令指针:MOV EIP, SS:[ESP]
  2. 栈指针上移:ESP = ESP + 4
    搭配规则
    CALL 和 RET 成对使用,保证程序正常返回

LOOP 循环指令

格式
LOOP 目标标签
执行规则

  1. ECX = ECX - 1(循环计数器自减)
  2. 判断:若 ECX ≠ 0,则跳转到目标地址;否则顺序执行下一条指令
    用法
    循环次数提前存入ECX,典型用于固定次数循环
    示例:
    mov ecx, 5 ; 设置循环5次
    loop_tag:
    ; 循环体代码
    loop loop_tag

重复前缀 REP / REPE

  1. REP 无条件重复
    规则:循环执行后续串指令, 每执行一次串指令,ECX = ECX - 1, 直到 ECX = 0 停止
    搭配组合
    REP MOVSB/MOVSW/MOVSD:批量拷贝整块内存
    mov ecx, 100 ; 复制100次
    cld
    rep movsb ; 循环复制100个字节
    REP STOSB/STOSW/STOSD:批量填充整块内存
    mov ecx, 0x40
    xor eax,eax
    rep stosd ; 填充0x40个双字,整块清零
  2. REPE / REPZ 相等则重复
    ● 规则:同时满足 ECX≠0且ZF=1(两数相等),才继续重复
    ● 一旦 ZF=0(不相等),立刻终止循环,常用于串比较

MOVS 串传送指令(内存→内存专用)

基础分类
MOVSB:字节传送(1B)
MOVSW:字传送(2B)
MOVSD:双字传送(4B)
统称 MOVS 系列,是汇编里少数允许内存直接复制到内存的指令,普通 MOV 做不到
固定配对寄存器
ESI:源数据内存地址(DS 段)
EDI:目标存放内存地址(ES 段)
自动地址修正
执行一次 MOVS 后,CPU 自动修改 ESI、EDI,增减由 DF 方向位决定:
MOVSB:±1
MOVSW:±2
MOVSD:±4
DF=0(正向,CLD 清零指令设置) ESI、EDI 数值变大(地址递增)
DF=1(反向,STD 置 1 指令设置) ESI、EDI 数值变小(地址递减)
cld ; DF=0,地址往上增长
mov esi, src_addr ; 源地址
mov edi, dst_addr ; 目标地址
movsb ; 复制1字节,esi+1,edi+1

串比较指令 CMPSB / CMPSW / CMPSD

执行规则

  1. 用 DS:[ESI] 与 ES:[EDI] 做减法,不保存结果,仅修改标志位(重点判断 ZF)
  2. 根据 DF 位,ESI、EDI 自动增减对应字节数
  3. 搭配 REPE:
    ○ 两字符相等(ZF=1)且 ECX≠0:继续比较
    ○ 遇到不相等(ZF=0):立即停止比较
    ○ 全部字符相等:循环结束后 ZF=1;存在不等字符:ZF=0
    指令 比较单位 地址变化
    CMPSB 单字节 ESI±1、EDI±1
    CMPSW 双字节 ESI±2、EDI±2
    CMPSD 四字节 ESI±4、EDI±4
    示例
    mov ecx, 10 ; 最多比较10个字节
    repe cmpsb ; 逐个字节比较,不等则停止
    jne not_equal ; ZF=0,串不相等则跳转

STOS 串存储填充指令(寄存器→内存)

三条细分
STOSB:把 AL 存入 [EDI]
STOSW:把 AX 存入 [EDI]
STOSD:把 EAX 存入 [EDI]
特性
只操作 EDI 目标地址,不读取 ESI;
执行后 EDI 自动 ±1/±2/±4,规则同样受 DF 控制;
典型用途:批量清零内存、整块缓冲区填充固定值
示例:把一块内存全部填 0
xor eax,eax ; EAX清零
stosd ; 向EDI处写入0,edi+4

速记

  1. CALL 压返回地址 + 跳转,RET 弹地址 + 返回,函数调用标配
  2. LOOP 靠 ECX 计数循环
  3. 串操作默认 ESI(源)、EDI(目的),DF 控制地址增减
  4. REP 只管 ECX,用于数据拷贝;REPE 结合 ZF,用于字符串比对
http://www.jsqmd.com/news/1099854/

相关文章:

  • 基于STM32单片机智能手环心率血氧体温GPS定位跌倒计步器系统设计1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 哈夫曼树的构造、编码生成与带权路径长度计算——基于C语言的实验实现与分析 P12114068王勇豪
  • 湘美谈教育湘美书院成功学系列:AI时代的,图书的意义
  • P1375 小猫【洛谷算法习题】
  • 为什么你的vmx文件压缩后反而增大?深度解析NTFS稀疏文件、零填充与TRIM指令协同失效原理
  • 题材多元口碑在线 高分游戏承包你的游玩档期
  • 跨越微伏级噪声鸿沟:硬核解析工业微弱传感器信号调理与高精度捕获实战
  • 村花云 - 高性价比云服务器服务平台
  • 汇编——比较指令和条件跳转指令
  • Ubuntu 系统安装 Hermes Agent 使用教程
  • web安全代码基础-PHP(模板组件插件安全)
  • FastAPI 基础篇:类型注解驱动的 Python Web 开发范式
  • OpenHarness源码研究-4-AgentLoop对话引擎与工具系统
  • 如何深度掌控AMD Ryzen处理器:专业硬件调试工具完全指南
  • ros2 humble安装anaconda
  • 机器人-混合关节架构
  • Certbot:免费自动化 HTTPS 证书管理工具
  • 2026年桌面风扇推荐:三款不同功能定位机型,按需选择不踩坑
  • 【毕设级】SpringBoot + MySQL + Thymeleaf 实现高校教材征订管理系统(班级统订+个人补订)
  • Linux生产环境硬盘挂载:告别盘符漂移,使用UUID实现稳定自动挂载
  • 手把手教你用SM2259XT2开卡工具修复固态硬盘(附B0KB颗粒实测)
  • 小学期记录
  • Awesome LLM Skills:给 AI 编程助手装上各种技能包
  • 3分钟掌握深度学习漫画翻译神器:BallonsTranslator完全指南
  • 机器人-从“性能参数领先”转向“工业化能力领先”
  • 效率够高吗?8款AI论文网站排行榜,毕业季救星!
  • Docker部署-非root用户openEuler 20.03部署
  • How To Secure A Linux Server:一份持续更新的服务器安全加固手册
  • 2026年6月个人工作生活总结
  • Linux Page Cache 导致视频解码第一次慢、第二次快的原因分析与缓存清理方法