实验任务:
一、综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个
字单元重复填充字数据 0403H。
源代码如下:
直接运行程序
符合实验结论
根据要求四,将源代码程序中字数据 0403H→修改为 0441H,再次运行
二、综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
0~63(3FH)
源代码如下:
用debug将m2.exe加载,并用命令查看:
先用u命令查看反汇编地址方便接下来执行g命令跳转
用p命令跳转循环
用d命令查看对应内存单元的值是否被修改
确实按要求修改完毕,实验结束
三、 教材实验 4(3)(P121)
源代码如下:
注意,cx的值先是随意赋值,然后在debug中通过反汇编查看loop下一条命令即mov ax,4c00h对应地址的值0017h减去开始的0000h即为代码长度17h也即是应该重复执行的次数
(loop下一条指令的地址为0017h)
复制的是mov ax,4c00h之前的指令,从076a:0000到076a:0016
复制有17个字节,字节数量通过debug的u命令反汇编得到(cx一开始的值随意复制)
用命令查看mov ax,4c00h命令之前(即从076a:0000开始的)内存单元:
观察到内存单元复制结果正确
实验结论:
实验1中注意传递的是字,不是字节,要先传递到一个16位寄存器ax,然后分开al,ah按字在内存中存储的方式传递到内存单元中,注意对显存的修改能直接作用于显示屏从而反映输出结果这个用法很巧妙
实验2中注意cx的传递次数,如果开始的值为0,那么要传递要求次数+1次(是否加一可以由实践结论得出)
实验3中注意cx的取值,一开始是不知道代码长度的,要通过先随意复制,调用debug的u命令查看想要复制的代码末尾地址,然后再次修改cx的值完成复制
其中还要注意:应为实验次数过多,有可能上一题的实验结果对内存的修改会影响下一题,保险的做法是重新启动一次dosbox!