当前位置: 首页 > 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.gsyq.cn/news/1611819.html

相关文章:

  • 湘美谈教育湘美书院成功学系列:AI时代的,图书的意义
  • 哈夫曼树的构造、编码生成与带权路径长度计算——基于C语言的实验实现与分析 P12114068王勇豪
  • 基于STM32单片机智能手环心率血氧体温GPS定位跌倒计步器系统设计1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • P1375 小猫【洛谷算法习题】
  • 村花云 - 高性价比云服务器服务平台
  • 汇编——比较指令和条件跳转指令
  • web安全代码基础-PHP(模板组件插件安全)
  • FastAPI 基础篇:类型注解驱动的 Python Web 开发范式
  • ros2 humble安装anaconda
  • 小学期记录
  • Docker部署-非root用户openEuler 20.03部署
  • OpenHarness源码研究-3-codex配置到输出对话
  • PDF转Excel免费工具推荐,批量转换不收费绿色版
  • 当企业应用AI销冠系统时,如何利用数字员工提升工作效率?
  • 基于微积分思维的数学分析教学
  • 鲁棒MPC、分布式MPC与学习型MPC:三种“进化版”模型预测控制
  • 7大编程语言核心区别全解析
  • 手机卖不动,运动相机凭什么逆势上涨?
  • 振弦采集仪与无线倾角计实测:传感器数据链路的瓶颈与闭环方案
  • 03目录和文件
  • TVA与具身智能深度融合的内在必然性(5)
  • 6款论文降AI率软件横评:AI率直降安全线,学生党必入平价款
  • 2026年买口碑好的TPU薄膜,这些销售厂家值得重点关注!
  • GPT-5.6全面公开与Cerebras 750 t/s上线:从受限预览到开发者普惠
  • MiniMax Code Plan 限时 9 折!分享我的订阅体验和优惠领取方式
  • 第十章 结构体与共用体 结构体仿真测试
  • 泰戈尔的诗歌
  • 开源多Agent投资研究框架ai-berkshire:从架构到部署实战
  • 计算机毕业设计之二手书回收平台设计与实现
  • Python学习笔记·第25天:Pandas高级技巧——用最通俗的话讲懂重采样、多索引和数据合并