zoukankan      html  css  js  c++  java
  • 实验 4 [bx]和loop的使用

    一、实验结论

    1.实验内容1

    综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据0403H。

    (1)代码如下:

    assume cs:code
    code segment
         mov ax,0b800h
         mov ds,ax
         mov ax,0403h
         mov bx,07b8h
         mov cx,16
    s:mov [bx],ax
      inc bx
      inc bx
      loop s
      mov ax,4c00h
      int 21h
     
    code ends
    end
    (2)用masm进行运行,运行结果如下

    (3)将源代码程序中字数据0403H→修改为0441H,再次运行

     

    2.实验内容2

     综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)

    (1)

    代码如下:综合使用loop, [bx], mov实现

    assume cs:code

    code segment
         mov ax,0020h
         mov ds,ax
         mov bx,0h
         mov cx,40h
         mov ax,0
    s:
      mov [bx],ax
      add ax,1h
      inc bx
      loop s
      mov ax,4c00h
      int 21h
     
    code ends
    end

     利用masm集成操作软件进行编译

    用debug查看储存单元,观察是否成功写入

    运行时没有出现结果,用debug查看内存单元发现,正常写入内存数据,代码运行成功

    (2)利用栈的特性,综合使用 loop,push 实现

    代码如下:

    assume cs:code
    code segment
         mov ax,0020h
         mov ss,ax
         mov sp,40h
         mov bh,3fh
         mov bl,3eh
         mov cx,20h
    s:push bx
      add bh,-2
      add bl,-2
        loop s
      mov ax,4c00H
      int 21H
    code ends
    end

    改动过程中出现的问题:

    ①由于8086cpu的栈读入按字(两个字节输入)所以入栈操作需要进入一个字的数据,然后把其中的两个字节数据分别减少2

    ②小端法的输入,push bx时(bx=bh+bl),将bh放到栈最底部,bl在bh的内存单元上面(例如bh的地址为10002H,bl的地址为10001H)

    所以要注意bh,bl的初始数值

    ③由于按字读入的原则,cx=40h/2=20h。

    对比两种方法,循环语句显然更容易让人理解,而用栈语句进行操作,操作效率更高,能一次输入两个字节。

     3.实验内容3

    源代码

    assume cs:code

             code segment

             mov ax,cs  因为cs为储存指令的段地址

             mov ds,ax

             mov ax,0020H

             mov es,ax

             mov bx,0

             mov cx,0017H  此处为代码的长度,用debug观察寄存器内容获得(cx=001c,减去后面的5个不计入其中的字节)

             s:mov al,[bx]

               mov es:[bx],al

               inc bx

               loop s

               mov ax,4c00H

               int 21H

    code ends

    end

    用debug进行调试

    用u命令反汇编

    可以看到,相应的代码内容已经复制到了0:200处,成功

     二、总结与体会:

    ①熟悉了loop和【bx】的应用,了解了循环语句的应用方法

    ②了解了栈入栈时的每个字节输入的先后顺序,对小端法的印象更深刻了

    ③熟悉了如何进行代码段的复制,cs和寄存器:【bx】的应用

  • 相关阅读:
    [leetcode]N-Queens II
    基于Linux的智能家居的设计(4)
    eclipse集成Python开发环境
    创业三年,离开公司,请各位看一下我的简历,指点一下未来的路
    Jquery实现选项卡功能
    R语言中两个数组(或向量)的外积怎样计算
    《Java程序猿面试笔试宝典》之组合与继承有什么差别
    Sublime Text3打造U盘便携Lua IDE
    php Laravel 框架之建立后台目录
    树的同构(25 分)
  • 原文地址:https://www.cnblogs.com/xihongqing/p/9971738.html
Copyright © 2011-2022 走看看