实验4实验报告
实验结论
实验内容1
源代码,这里注意第三行的0b800h,在汇编源程序中,数据不能以字母开头,所以在实际的数据b800前加了个0
编译,链接,执行后的结果
将源代码程序中字数据0403h改为0441h,再次编译,链接,执行
可以得知,被我们存入字数据的这段内存单元为显存,而屏幕上具体的输出内容和存入的字数据的值有关
实验内容2
源代码
编译,链接,生成可执行文件,然后用debug开始进行调试
先使用u命令反汇编进行查看
由于该程序单步执行较为繁琐,故使用g命令一次性将该程序执行完毕,可以看到“程序正常终止”说明程序已执行完毕,然后我们再使用d命令查看0:200~0:23f内存单元的内容,可以发现成功的将0~63送到了这段内存区域(右边显示的为相应ASCII码的转码符号)
实验内容3
初始源代码,这个程序的功能是将mov ax,4c00h之前的指令复制到内存0:200处,但是由于不能肉眼观察出要复制的指令的长度(也就是要复制的字节数),这里的mov cx,__先暂且填了1,待使用debug调试后可得到要复制的字节数,然后再修改这里的值,使程序达到目的;第一条指令和第二条指令可以看做把cs的值送入ds,后面的[bx]可以看作cs:bx,cs为代码段寄存器,也就是指向第一条指令,所以可以实现从第一条指令开始复制的操作
进行编译,链接,然后用debug调试
使用u命令反汇编,我们发现mov ax,4c00h之前的指令是从076a:0000~076a:0016,也就是说其机器码占用17h个字节,故要完成前面的指令的复制,单字节复制需要进行17h次,所以初始源代码中的mov cx,0需要修改为mov cx,17h
修改后的源程序
重新编译,链接,然后用debug开始调试
由于该程序单步调试起来较为繁琐,且这个实验内容的主要目的是做一个结果性的观察,故使用g命令一次性执行完该程序
然后我们使用d命令查看自0:200起的17h个内存单元的内容(精确到17h个内存单元是由于我们已经知道了mov ax,4c00h之前的指令的机器码占用17h个内存单元),发现其内容与mov ax,4c00h之前的机器码一致,说明指定的指令被成功复制到了我们所指定的位置
总结与体会
通过本次实验,我熟悉了[bx]和loop的具体实践操作,有了一些更深的理解,和高级语言中的循环进行比较,使二者融会贯通。
在使用loop指令时,确定循环次数尤为重要。
段前缀很好用,方便操作。
PS:私以为在完成实验内容并且进行相应的文字说明时已经考虑的较为周到了,所写的内容也较为丰富,故总结写的就比较少了=。=