zoukankan      html  css  js  c++  java
  • [BX]和loop指令03 零基础入门学习汇编语言25

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

     

    让编程改变世界

    Change the world by program


     

    从上边的课程中,我们可以总结出用cx和loop 指令相配合实现循环功能的三个要点:

    (1)在cx中存放循环次数; (2)loop 指令中的标号所标识地址要在前面; (3)要循环执行的程序段,要写在标号和loop 指令的中间。  

    用cx和loop指令相配合实现循环功能的程序框架如下:

    mov cx,循环次数

    s: 循环执行的程序段

    loop s

     

    问题5.2

    用加法计算123 x236 ,结果存在ax 中。 思考后看分析。  

    分析:可用循环完成,将123加236次。可先设(ax)=0,然后循环做236次(ax)=(ax)+123。

    程序代码 [codesyntax lang="asm"]
    assume cs:code
    
    code segment
        mov ax,0
        mov cx,236
        s:add ax,123
        loop s
    
        mov ax,4c00h
        int 21h
    code ends
    
    end
    [/codesyntax]  

    问题5.3

    改进问题5.2程序,提高123x236 的计算速度。 思考后看分析。  

    分析:问题5.2程序做了236 次加法,我们可以将236 加123次。可先设(ax)=0,然后循环做123次(ax)=(ax)+236,这样可以用123 次加法实现相同的功能。

      程序代码请自行实现。(参考代码) [codesyntax lang="asm"]
    assume cs:code
    
    code segment
        mov ax,0
        mov cx,123
    
    s:  add ax,232
        loop s
    
        mov ax,4c00h
        int 21h
    code ends
    
    end
    [/codesyntax]  

    在Debug中跟踪用loop指令实现的循环程序

     

    考虑这样一个问题,计算ffff:0006单元中的数乘以3,结果存储在dx中。我们分析一下:

    (1)运算后的结果是否会超出dx所能存储的范围? ffff:0006 单元中的数是一个字节型的数据,范围在0~255之间,则用它和3相乘结果不会大于65535,可以在dx 中存放下。 (2)我们用循环累加来实现乘法,用哪个寄存器进行累加? 我们将ffff:0006单元中的数赋值给ax,用dx进行累加。先设(dx)=0,然后做3次(dx)=(dx)+(ax)。 (3) ffff:0006单元是一个字节单元,ax是一个 16 位寄存器,数据长度不一样,如何赋值? 注意,我们说的是“赋值”,就是说,让 ax 中的数据的值(数据的大小)和ffff:0006 单元中的数据的值(数据的大小)相等。 8位数据01H和16位数据0001H的数据长度不一样,但它们的值是相等的。  

    那么我们如何赋值?

    ffff:0006单元中的数据是XXH,若要ax中的值和ffff:0006单元中的相等,ax中的数据应为00XXH。 所以,若实现ffff:0006单元向ax 赋值,我们应该令(ah)=0,(al)=(ffff6H)。 实现计算ffff:0006单元中的数乘以3,结果存储在dx中的程序代码。 注意程序中的第一条指令mov ax,0ffffh。 我们知道大于9FFFH的十六进制数据A000H、A001H、…… 、C000H、C001H、……、FFFEH、FFFFH等,在书写的时候都是以字母开头的。而在汇编源程序中,数据不能以字母开头,所以要在前面加0。  

    下面我们对程序的执行过程进行跟踪。

      首先 ,我们将它编辑为源程序文件,文件名定为 p3.asm ;对其进行编译连接后生成p3.exe;然后再用Debug对p3.exe中的程序进行跟踪。 上面,我们通过对一个循环程序的跟踪,更深入一步地讲解了 loop指令实现循环的原理。 下面,我们将前面的程序改一下,计算 ffff:0006单元中的数乘以 123,结果存储在dx中。  

    更改程序:只要将寻循环次数改为123。

    但是,问题来了……调试的话怎么办……总不能搞123次吧……很累的……对吧 ^v^ 于是乎,我们引入G命令来解决! 也可以是 P 命令!! [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LBQBGWVECUHX']视频下载[/Downlink]
  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846982.html
Copyright © 2011-2022 走看看