• [BX]和loop指令02 零基础入门学习汇编语言24


    第五章:[BX]和loop指令02

     

    让编程改变世界

    Change the world by program


     

    Loop指令

      指令的格式是:loop 标号,CPU 执行loop指令的时候,要进行两步操作:

    (cx)=(cx)-1;

     判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

      从上面的描述中,我们可以看到,cx中的值影响着loop指令的执行结果。 通常(注意,我们说的是通常)我们用loop指令来实现循环功能,cx 中存放循环次数。 这里我们讲解loop指令的功能,关于loop指令如何实现转至标号处的细节,将在后面的课程中讲解。下面我们通过一个程序来看一下loop指令的  

    具体应用:

      任务1:编程计算2^2,结果存放在ax中。 任务1分析 设(ax)=2,可计算:(ax)= (ax)*2,最后(ax)中为2∧2的值。N*2可用N+N 实现。   程序代码: [codesyntax lang="asm"]
    assume cs:code
    
    code segment
        mov ax,2
        add ax,ax
    
        mov ax,4c00h
        int 21h
    code ends
    
    end
    [/codesyntax]   任务2:编程计算2^3。 任务2分析 2^3=2*2*2,若设(ax)=2,可计算:(ax)= (ax)*2*2,最后(ax)中为2^3的值。N*2可用N+N 实现。   程序代码: [codesyntax lang="asm"]
    assume cs:code
    
    code segment
        mov ax,2
        add ax,ax
        add ax,ax
    
        mov ax,4c00h
        int 21h
    code ends
    
    end
    [/codesyntax]   任务3:编程计算2^12。 任务3分析 2^12=2*2*2*2*2*2*2*2*2*2*2*2,若设(ax)=2,可计算:(ax)= (ax)*2*2*2*2*2*2*2*2*2*2*2,最后(ax)中为2^12的值。N*2可用N+N 实现。   程序代码: [codesyntax lang="asm"]
    assume cs:code
    
    code segment
        mov ax,2
        ;做11次add ax,ax
    
        mov ax,4c00h
        int 21h
    code ends
    
    end
    [/codesyntax]   按照我们的算法,计算2^12需要11条重复的指令add ax, ax。我们显然不希望这样来写程序,这里,可用loop来简化我们的程序。 使用loop指令之后的代码 [codesyntax lang="asm"]
    assume cs:code
    
    code segment
        mov ax,2
        mov cx,11
    s:  add ax,ax
        loop s
    
        mov ax,4c00h
        int 21h
    code ends
    
    end
    [/codesyntax] (1)标号在汇编语言中,标号代表一个地址,此程序中有一个标号s 。它实际上标识了一个地址,这个地址处有一条指令:add ax,ax。 (2)loop s CPU 执行loop s的时候,要进行两步操作:

    (cx)=(cx)-1;

    判断cx 中的值,不为0 则转至标号s 所标识的地址处执行(这里的指令是“add ax,ax),如果为零则执行下一条指令(下一条指令是mov ax,4c00h)。

    (3)以下三条指令

    mov cx,11

    s: ddd ax,ax

    loop s

      执行loop s时,首先要将(cx)减1,然后若(cx)不为0,则向前转至s处执行add ax,ax。所以,我们可以利用cx来控制add ax,ax的执行次数。 下面我们详细分析一下这段程序的执行过程,从中体会如何用cx 和loops 相配合实现循环功能。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LKGYFLLOMQJV']视频下载[/Downlink]
  • 相关阅读:
    基于redis实现滑动窗口式的短信发送接口限流
    Linux 宝塔下的PHP如何与本地的nginx关联
    Linux 下php安装gd库
    Linux Mysql8重置密码
    PHP 无限分级类
    redis 缓存穿透,缓存雪崩,缓存击穿
    yii2 事务添加
    ConcurrentHashMap
    Volatile
    this引用的逸出
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846000.html
Copyright © 2020-2023  润新知