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

汇编-loop循环指令

LOOP指令是根据ECX计数器循环,将语句块重复执行特定次数。

ECX自动作为计数器, 每重复循环一次就递减1。

语法如下所示:

循环目的地址必须在距离当前位置计数器的-128到+127字节范围内

LOOP指令的执行有两个步骤:

第一步, 将ECX减1;

第二步, 将ECX与0比较。如果ECX不等于0, 则跳转到标号destination。如果ECX等于0, 则不发生跳转, 控制将被传递到循环后面的指令

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD

.data

.code
main PROC
        
        mov eax,0 
        mov ecx, 5
        L1:
        inc eax 
        loop L1

        
    INVOKE ExitProcess,0
main ENDP
END  main

在上面的例子中,每次循环都将EAX加1。当循环结束时, EAX=5, ECX= 0

一个常见的编程错误是, 在循环开始之前, 无意中将ECX初始化为0。如果发生了这种情况, LOOP指令将ECX减1后, 其值就变为FFFF FFFFh,循环次数就变成了4294967296

嵌套循环

嵌套循环当在一个循环中再创建一个循环时,就必须特别考虑外层的循环计数器ECX, 可以将它保存在一个变量中:
 

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD

.data
count DWORD ?

.code
main PROC
        
        mov eax,0
        mov ecx, 100       ;设置外层循环计数值
     L1:
        mov count, ecx      ;保存外层循环计数值
        mov ecx, 20          ;设置内层循环计数值
     L2:
        inc eax
        loop L2
        mov ecx, count       ;恢复外层循环计数值
        loop L1
        ;EAX = 000007D0h=2000

        
    INVOKE ExitProcess,0
main ENDP
END  main


http://www.kler.cn/a/134609.html

相关文章:

  • 使用etl工具kettle的日常踩坑梳理之二、从Hadoop中导出数据
  • 数据挖掘(九)
  • Vue 3 介绍及应用
  • 【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing
  • ubuntu20.04安装FLIR灰点相机BFS-PGE-16S2C-CS的ROS驱动
  • Java的dto,和多表的调用
  • html使用天地图写一个地图列表
  • maven打包插件配置模板
  • 汇编-指针
  • npm install 下载不下来依赖解决方案
  • git安装后报git: ‘remote-https‘ is not a git command. See ‘git --help‘.
  • 【Ant Design合集】自用总结
  • IDEA 集成 Docker 插件一键部署 SpringBoot 应用
  • 解决小程序路由超过10层限制
  • 面试题c/c++--语言基础
  • SDL2 播放音频数据(PCM)
  • TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt
  • JSP 四大域对象
  • 分类预测 | Matlab实现基于PSO-SDAE粒子群优化算法优化堆叠去噪自编码器的数据分类预测
  • 【开源】基于JAVA的超市自助付款系统
  • NewStarCTF2023 Reverse方向Week3 ez_chal WP
  • Unity开发之C#基础-集合(字典)(Dictionary)
  • 【C++】​——多态性与模板(其一)
  • 前端 webpack 面试题
  • nginx学习(3)Nginx 负载均衡
  • 2023年中国地产SaaS分类、产业链及市场规模分析[图]