实验结论:
1.综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H。
(1)源代码如下:
1 assume cs:code 2 code segment 3 mov ax,0b800h 4 mov ds,ax 5 mov bx,07b8h 6 mov cx,16 7 mov ax,0441h 8 9 s: mov [bx],al 10 inc bx 11 mov [bx],ah 12 inc bx 13 loop s 14 15 mov ax,4c00h 16 int 21h 17 code ends 18 end
运行结果如下:
(2)将源代码程序中字数据 0403H→修改为 0441H,再次运行,截图显示运行结果。
2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据0~63(3FH)。
(1)源代码如下:
1 assume cs:code 2 code segment 3 mov ax,0020h 4 mov ds,ax 5 mov bx,0 6 mov cx,40h 7 8 s: mov [bx],bx 9 inc bx 10 loop s 11 12 mov ax,4c00h 13 int 21h 14 code ends 15 end
(2)汇编、链接无误后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令查看 0:200~0:23F,确认是否将 0~63 传送至此段内存区域。这部分,要求有截图。
用d命令查看后发现的确将0~63传送至了此段内存区域。
3.下面的程序功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
(1)补全代码如下:
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 10 s: mov al,[bx] 11 mov es:[bx],al 12 inc bx 13 loop s 14 15 mov ax,4c00h 16 int 21h 17 code ends 18 end
(1)第一空:要将“mov ax,4c00h”之前的指令复制到内存0:200处我认为只要将代码段地址赋值给ds。
(2)第二空:一开始并不知道cx的值是多少,所以随便写了一个,然后通过反汇编可以看出“mov ax,4c00h”之前的代码长度为17h。
再用d命令查看之后的若干字节:
确实被复制。
总结与体会:
这次实验我学会了用loop循环减少繁琐的步骤,也学会了用[bx]和loop向内存中传送数据。