实验四 [bx]和loop的使用

练习1:编程

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

 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以便汇编程序区分常数和符号。因此第一个零不能少,它只起区分做用。oop

  cx=10H也能够写成十进制的cx=16.spa

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

练习2:3d

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

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

 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命令执行到event

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

相关文章
相关标签/搜索