实验一

我的实验环境:windows 10系统下通过dosbox

一.实验结论

(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。

 

使用e命令输入机器码。

 

 

使用反汇编命令得到的汇编指令,而且与书上的代码相同。

 

 

将这段汇编指令运行,到最后一步时结果,可以看到AX和BX的值已经经过一步步发生了改动。而且在使用t命令时,一定要注意要从写代码的地址开始运行,即要修改CS与IP的值。

(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。

 

 

输入指令

 

 

经过运行,得到的AX的值即为2的8次方,但是这里的数字为十六进制,十六进制的100化为十进制后为256,为2的8次方。

(3)PC主板机上的ROM中写一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

 

 

找到了生产日期,在图中,FFF0:00F0的地址上。

 

试图修改生产日期,但是修改完查询后发现修改失败。因为这段地址为各个ROM的地址空间,并不能进行改动。

(4)向内存B8100H开始的单元填写数据

 

 

填写数据后,发现屏幕上多了几个图案。当小幅改变地址时,发现图案出现在了其他位置。其中01为ACSLL码代表了一个笑脸,同时也代表其颜色为蓝色,02,03等所表示的依次类推。

以8000H~9FFFH为空间显存地址,这里的数据被写入显存,然后被显卡输出到显示器上。

 

二.总结与体会

    本次实验其实算是我第一次在dubug环境下真正使用汇编语言,之前仅仅只是学会了如何配置好环境。同时我发现,学习汇编让我感觉使用命令行工具并不是一个复杂的东西,而且甚至有时候它的功能还很实用。因为我的电脑是win10系统下用dosbox进行调试的,不知为何dosbox的窗口特别小而且窗口模式下无法放大(应该是因为分辨率),所以截图时图片显得小,而在实验室时因为是32位win7可以直接使用电脑上的命令提示符,截图可以更加清晰明显。

    本次实验内容中,主要是学习了一些汇编指令的操作方法,还有机器码对汇编指令的转换。实验一中,直接输入机器码的方式,再通过反汇编得到这些指令,不过看出机器码要比汇编指令难看懂许多。同时在使用e进行输入时,也发现了更加方便贴合人心的输入方法(上图所示),当使用e并且在后面直接写内容时,有可能会因为输入过多不再让输入;而这种方法可以一个一个进行修改,方便人计数,不容易改错。实验二里,只写一条add ax,ax指令加上修改段地址和偏移地址就可以达到求出2的8次方。实验三四主要是关于一些地址所代表的特殊意义,比如屏幕显示的内容也是有其所代表的地址的。这对于学习汇编还是一个开始。