实验1实验报告
实验结论
(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。
首先我们使用E命令将指令写入内存,再用U指令反汇编查看输入是否正确,这里要注意输入的方式,若为-e 起始地址 数据 数据 数据 ……的形式,会受到输入长度的限制,故不能一次性修改完成,所以可以采用提问的方式逐步修改从起始地址开始的内存单元的内容
(最后的小三角是截图时有按alt键自动打上去的,手动消除即可)
然后用r命令改变CS和IP寄存器的值使其指向我们要执行的内存单元,准备执行我们的程序
开始单步执行程序……
…………………………………………………………………………
执行了好多好多步之后终于执行完了QAQ
然后我们退出dosbox,换a命令再来一遍……
用a命令输入完汇编指令后再用d命令查看该段内存中的机器码
然后我们再用r指令把CS和IP的值修改掉使其指向我们要执行的程序的起始内存单元,截图省略(我懒23333,而且上面有相同操作啦=。=)
然后用t命令一步步执行程序,这里只放出最后的截图
可以发现,用e命令和a命令两种方式将指令写入内存,执行结果都是一样的。
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
我们用a命令从2000:0000单元开始写入程序段,然后用t命令单步执行,可以发现执行完jmp命令后又跳转到2000:0003的命令开始执行,这类似于高级语言中的循环,这里的ax,ax可以理解为将ax中的值乘二
使用了很多次t命令之后,ax的值终于变成了256(2的8次方),此时jmp指令应该是执行了7次,也就是说第一次执行完ax,ax后ax中的值是2,后面的7次t命令又使2乘了7个2,也就是2的8次方
(3)查看内存中的内容。
PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
使用d命令查看内存单元FFF00~FFFFF中的内容,右边部分对应的是左边的ASCII转码内容,我们要找的主板生产日期就在这里面,emmmmmm……92年1月1日????(黑人问号)
然后我们使用e命令修改存有日期的内存单元中的内容,再用d命令查看,修改失败…………
因为ROM是只读存储器,故不能修改其中的内容。
(4)向内存从B8100H开始的单元中填写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
请先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。
输入了指定的数据后,出现了奇怪的彩色图案=。=
改变了填写的数据(顺序调换),可以发现出现的图案的顺序也调换了
改变了填写的地址,并没有发生什么…………
书p12页,8086PC机内存地址空间将A0000~BFFFF分配为显存地址空间,而B81000在此范围内,所以可以输出彩色图案,若所填写地址不在此范围内,就不能输出图案。
总结与体会
1.知道了dosbox的基本使用方法。
2.熟悉了debug基本命令的使用方法,并能使用这些基本命令进行一些基本的操作。
3.指令和数据在内存中的存储形式相同,想要了解某段内存中存储的内容可以试着用u命令反汇编查看。
4.总体上大致知晓计算机内部的工作方式,可以进行相对深入的研究。