• 实验四 [bx]和loop的使用


    练习1:

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

     1 assume cs:code
     2 code segment
     3         mov ax,0b800H
     4         mov ds,ax
     5         mov bx,07b8H
     6         mov cx,16
     7         
     8 a:      mov [bx],0441H
     9         inc bx
    10         inc bx
    11         loop a
    12 
    13         mov ax,4c00H
    14         int 21H
    15 code ends
    16 end
    View Code

      注意黄色区域,0b800H,中第一个0不能少。按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。所以第一个零不能少,它只起区分作用。

      cx=10H也可以写成十进制的cx=16.

     将源代码程序中字数据0403H→修改为0441H,再次运行,截图显示运行结果。

    练习2:

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

      (1)必做:综合使用loop, [bx], mov实现 

     1 assume cs:code
     2 code segment
     3         mov ax,0H
     4         mov ds,ax
     5         mov bx,0200H
     6         mov cx,40H
     7 
     8 z:      mov [bx],al
     9         inc al
    10         inc bx
    11         loop z
    12 
    13         mov ax,4c00H
    14         int 21H
    15 code ends
    16 end
    View Code

      debug 4_2.exe

      

      

    用g命令执行到

      (2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过 指令实现) 

     1 assume cs:code
     2 code segment
     3         mov ax,0
     4         mov ss,ax
     5         mov ax,3F3EH
     6         mov sp,240H
     7         mov cx,20H
     8 a:      push ax
     9         add ax,-0202H
    10         loop a
    11         mov ax,4C00H
    12         int 21H
    13 code ends        
    14 end
    View Code

    此处的add ax,-2020H 也可以改成sub ax,0202H,效果是一样的。

    练习3. 教材实验4(3)(P121)

     1 assume cs:code
     2 code segment
     3      mov ax,cs
     4      mov ds,ax
     5      mov ax,0020h
     6      mov es,ax               
     7      mov bx,0
     8      mov cx,17h
     9 s:   mov al,[bx]
    10      mov es:[bx],al
    11      inc bx
    12      loop s
    13      mov ax,4c00h
    14      int 21h
    15 code ends
    16 end
    View Code

      

      

      

    和下面的图对比一下,是一摸一样的,说明该程序段起到了它该有的作用。

      

    实验总结与体会:

      第一个实验:在8086PC芯片中,0~9FFFF是主要存储地址空间(RAM),A0000~BFFFF是显存地址空间,C0000~FFFFF是各类ROM地址空间。且在十六进制数前,如果是字母开头,一定要加区分符0区分。

      第二个实验:在8086进栈中,是从高地址单元到低地址单元,而且只能以字单元进行压栈,弹栈。

      第三个实验:代码段和数据并没有差别,只是在于你怎么读取,理解。CS:IP指向的数据,就是代码,DS:[bx]指向的就是数据。

  • 相关阅读:
    vi常用命令学习
    [Oracle]约束(constraint)
    [Oracle]高水位标记(HWM)
    线性表&顺序线性表
    ERP,ARP瘦身并如何删除。
    Oracle 如何开启归档模式
    oracle9i的erp数据库无法正常关闭的解决方法。
    C语言学习之assert
    ORA-00257 archiver error的处理
    单利与复利
  • 原文地址:https://www.cnblogs.com/auspice/p/9978306.html
Copyright © 2020-2023  润新知