实验1 查看CPU和内存,用机器指令和汇编指令编程
Posted xihongqing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验1 查看CPU和内存,用机器指令和汇编指令编程相关的知识,希望对你有一定的参考价值。
四、实验结论
任务一:使用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和内存,用机器指令和汇编指令编程的主要内容,如果未能解决你的问题,请参考以下文章