汇编基础学习11

本文详细解析了汇编语言中的Loop循环指令的工作原理及使用方法。通过具体实例,介绍了如何利用ECX寄存器控制循环次数,并展示了完整的循环过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章转自 http://www.mcany.cn/article/286.htm

博主 没落的残阳

 

这节来学习下loop循环指令。我们高级语言的堆栈分配初始化可是靠它了呵呵。 首先我们来看下它的指令格式。。

        LOOP    标号  ;ECX不为零时跳转至标号循环.标号只是写汇编程序时用来表示一个内存地址的。

例如
token:
     xor eax, eax
此时token等于 xor eax, eax指令的内存地址 。标号格式:“ 标号名称: ”。
      
  从它的指令格式中,我们就可以看出来,它是靠判断ecx寄存器是为0来决定是否往下循环的。那么我们可以由此联想到,每次循环之前我们要对ecx进行赋值,也就是赋上循环次数。。

    
   举例

         mov ecx, 3h ;循环次数
   _loop:;标号,它在汇编中是用来标示内存地址。此时_loop = mov eax, 00304020h的内存地址。它的格式是 标号名:
         mov eax, 00304020h ;循环内容
         add eax, eax ;循环内容
         loop _loop


这里我们来分析下这个循环过程。

      1.  首先程序执行
        mov ecx, 3
        mov eax, 00304020h ;eax = 00304020h
        add eax, eax ; eax = eax+eax
        loop _loop ;执行到这里ecx-1=2,然后cpu判断ecx寄存器是否为0,如果是的话结束循环往下执行,如果不是则跳转到标号处继续执行。。
    
     2  第二次执行
        mov eax, 00304020h ;eax = 00304020h
        add eax, eax ; eax = eax+eax
        loop _loop ; ecx -1 = 1
    ;执行到这里ecx-1=1,然后cpu判断ecx寄存器是否为0,如果是的话结束循环往下执行,如果不是则跳转到标号处继续执行。。

    3  第三次执行
        mov eax, 00304020h ;eax = 00304020h
        add eax, eax ; eax = eax+eax
        loop _loop ; ecx -1 = 0
    ;执行到这里ecx - 1 =0, cpu判断ecx已经是0了,就不接着跳转标号继续循环了,则设置设置eip为下一条指令的偏移,继续开始执行。。


        其实也很简单。。  loop是靠判断ecx寄存器为依据来进行循环的。 loop指令后面跟的是一个内存地址。也就是要进行起始循环指令的地址。 如果ecx不为0,则跳转到起始循环指令的地址开始执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值