码迷,mamicode.com
首页 > 其他好文 > 详细

实验1 查看CPU和内存,用机器指令和汇编指令编程

时间:2018-10-21 13:02:16      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:行数据   多次   培养   结果   因此   执行   输入   体会   随笔   

四、实验结论

任务一:使用debug,将下面程序段写入内存,逐条执行,观察每条程序执行后CPU中相关寄存器的内容的变化

方法一:

(1)使用e命令在1000:0的起始位置将程序的机器码读取到内存单元中,利用d命令查看内存中的信息,并且利用u命令进行反汇编,将读取的机器码转化为汇编指令;

技术分享图片

(2)先改写cs:ip的指向,使cs:ip的值指向写入程序段的位置,然后用t命令分步调试,执行汇编指令

技术分享图片

 技术分享图片

技术分享图片

技术分享图片

可以看到,当每次执行完一条汇编指令之后,不只是相应的寄存器的值由于汇编指令发生变化,cs:ip的值也会发生变化,这是为了保证汇编指令能够持续进行,每执行一次汇编指令,cs:ip的值就会加上这条汇编指令的长度。

 方法二:

(1)利用a命令写入汇编指令

技术分享图片

(2)用t命令对相应汇编指令分步调试,观察相应寄存器的变化

结果与方法一的(2)相同

任务二:

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

(1)利用a命令从2000:0开始的内存单元写入相应汇编指令

技术分享图片

(2)更改cs:ip的指向,使其指向2000:0,用t命令分条执行汇编指令

技术分享图片

可以看到,由于汇编指令“jmp 2000:0003”的存在,汇编指令的执行构成了一个循环。因此,我们可以用这段指令来计算2的8次方的具体值。

(3)多次用t命令执行循环后,得到结果

技术分享图片

ax=100H

任务三:查看内存中的内容

(1)用r指令查看内存FFF00-FFFFF之间的内存信息

技术分享图片

我们可以清楚的看到,该内存段中,右侧只有“01/01/92”这一个日期,所以,不难猜测,该日期就是我们要找的主板生产日期

(2)尝试改写生产日期

技术分享图片

可以看到,该日期对应的ASCII码值为:30 31 2F 30 31 2F 39 32 

我们将日期改写为“02/02/92”,对应的ASCII码为:30 32 2F 30 32 2F 39 32

用e命令对其进行改写

 技术分享图片

改写完之后,再次用d命令显示内存信息

技术分享图片

可以看到,内存信息并没有发生改变,这是为什么呢?

因为该生产日期写在了主办的ROM(只读存储器)上,因此我们无法对其进行改动。

任务四:

向内存从B8100H开始的单元处填写数据

(1)用e命令向该内存单元处写入数据

技术分享图片

技术分享图片

 

 上面的两张图我们可以看出,当输入一个数据时,会在屏幕右上角生成一个符合,输入两个相同的数据时,对应符号的颜色会发生改变。

(2)出现这种情况的原因

这是因为在8086CPU之中,内存地址空间分配情况导致的,8086CPU中,A0000-BFFFF是显存地址空间,我们向显存地址空间输入数据,就是向显存中写入数据,这些数据当然会被显示卡输出到显示器上,就出现了我们看到的结果。

五、总结与体会

汇编知识方面:

通过这次实验,加深了我对汇编语言中各个指令使用的熟练程度,具体的实验操作也使得我对于8086CPU的实际工作状态有了认识。例如:cs:ip的地址代表着指令的执行指向,要执行相应指令之前先改变场cs:ip的指向;8086CPU机内存地址空间分配的情况;如何利用汇编指令进行数据的处理,计算;等等。通过此次实验,我发现培养对于一门学科的兴趣的最好方法就是让自己参与进去,亲自动手操作,这样才能发现自己对于知识的掌握情况,才能发现自己的不足

纸上得来终觉浅,绝知此事要躬行

博客园操作方面:

随笔的写作过程中一定要按时保存,不要寄希望于系统的自动保存,做完一个部分及时保存到草稿箱才是最重要的,否则就会和我一样,做到最后不小心按到退档键,只能重新写一遍了/(ㄒoㄒ)/~~。

 

实验1 查看CPU和内存,用机器指令和汇编指令编程

标签:行数据   多次   培养   结果   因此   执行   输入   体会   随笔   

原文地址:https://www.cnblogs.com/xihongqing/p/9824141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!