博客园
虽然痛苦,却依旧要快乐,并相信着未来。

导航

 

练习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]指向的就是数据。

posted on 2018-11-19 19:08  砖猿  阅读(246)  评论(4编辑  收藏  举报