实验1

DOSBox环境配置:https://www.cnblogs.com/xyl744188/p/9829908.html

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

Num1----对于这一实验我首先用e命令在指定内存单元,依次输入上图的机器码,然后用d命令查看我是否将数据成功写入这些内存单元,最后再用u命令进行反汇编,发现得到的汇编指令与上图的一致。然后用t命令单步执行。

下附图:

在单步执行时,发现CS:IP总存放下一条指令的地址

 

Num2---先用a命令输入指令再用t命令单步调试

对指令反汇编,得到的机器码,与上图对应。

另外,说说我在本实验中遇到的问题吧:

1、一开始我存数据的时候并没有换行,而是一直输到一行末尾,然后发现没法再往后写数据了。有时候到了下一行可以存一个数据,而有时候存不了。于是又要换行再用e命令存数据,这时就需要知道我之前写到哪个内存单元了。我写的时候都是一个一个往后数,然后算一下下面该写哪个内存单元。

那么,有没有什么简便的方法可以得到我上次用e命令写到了哪个内存单元呢?

e命令后跟你要修改的内存空间的起始地址,回车,每修改一个值就敲一个空格,直到不用修改了再敲回车,输入其他命令。

2、之前发现有些数字之间会有一条横杠,查了些资料,说是为了方便阅读,每行有16个数据,然后每8个数据之间会有一条横线,用以分隔。(忽然发现自己的问题有些蠢)

 

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

实验过程:

一开始cs:ip存储的地址并不是我们指定的地址,于是可以用r指令修改,然后单步调试。

当然,也可以直接用t=2000:0的形式调试

 jmp是一句跳转指令

 

(3)查看内存中的内容

PC主板上的ROM中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个出产日期并试图改变它。

据图可以看出,最后一行应该就是生产日期

我尝试通过e命令改写,但发现没有任何效果

 

地址C0000~FFFFF的内存单元为只读存储器,写入数据操作是无效的。

 

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

请读者先填写不同的数据,观察产生的现象;再改变写的地址,观察产生的现象。

我发现当我改变单元中的值时,图画也随之变化

然后再将内存空间中的值,重置为零,再向其中写入一个值(记住只是一个),发现没有任何图案出现,而再加一个数据,就会出现一个图案。由图一可知,输入了8个数据,出现了4个图案,由此可知每两个字节可以产生一个图案。

改变地址,再次重复上述步骤:

发现屏幕上没有产生什么变化。

 

那么为什么会产生这种差异呢?

 

我们可以知道不同的计算机系统的内存地址空间的分配情况是不同的,00000~9FFFF内存单元为主随机存储器,读取数据正常;A0000~BFFFF内存单元为显存,会将输入的数据显示到屏幕上;而C0000~FFFFF这段空间我在上文已经说过了,这里就不再说了。

 

 

对不同的地址单元写入相同的数据,发现它们的位置、图案、颜色都不尽相同

 

这又是为什么呢?

通过阅读下面那篇文章,也许可以为我们解答一二

https://blog.csdn.net/PacosonSWJTU/article/details/48976995?utm_source=blogxgwz3

 

  最后,来个总结吧,通过这几个实验初步了解了汇编中的几种基本指令,也学会了debug的命令,对内存空间的分配也有了初步的认识

posted @ 2018-10-24 15:04  xxxux_onezero  阅读(529)  评论(0)    收藏  举报