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

四、实验结论

任务一:

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

(2)利用t命令来单步执行从1000:0处开始的命令(此时CS:IP就指向我们命令的起始位置1000:0)


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

(2)用t指令进行单步调试同上(2)


任务二:

(1)首先利用r命令查看当前所有寄存器的值(此时CS:IP为073F:0100)

(2)然后用a命令在2000:0的起始位置写入汇编指令

(3)接着修改CS和IP的值,直接用t命令单步调试,此时不需要给t命令指向,因为t命令开始的位置就是CS和IP指向的位置(和上面t=1000:0比较

重复执行t命令得到最后结果:

从单步调试的过程中可以看到AX寄存器中值的变化,最后讲2^8的结果保留在ax寄存器中。

在debug调试中,数据默认是16进制的,2^8=256=0100H(所以最后答案为0100H)


任务三:

(1)利用d命令查看fff0:0到fff0:ff内存中的数据

(2)我们可以观察到右边数据所对应的字符有01/01/92(就是我么所需要找的生产日期)

(3)观察到该日期由划红线的16进制数据表示,(在忽略了是否可以真的改变这个日期的时候,我兴冲冲地试了一试)

我现在想要把这个日期改为01/10/18,那么所对应的内存中的数据就要改成30 31 2F 31 30 2F 31 38

注:字符是根据ASCII码显示的;

本来信心满满地去修改这个日期,but fail 了。。。

从书的1.15节处可以看到地址C0000~FFFFF的内存单元中写入数据是无效的,因为这个部分是各类ROM地址空间,ROM是只读存储器,只读存储器只能读取不能写入。


任务四:

(1)觉得很有趣,一个手痒就打出了这么多

(2)通过观察:两个内存单元中的数据控制一个彩色符号,第二个内存单元中的数据控制符号的颜色,第一个内存单元的数据控制符号的的样式

(3)改变内存的位置,彩色符号出现的位置会改变


 五、实验总结和体会

存在疑问的地方???

在观察彩色符号的时候,随机的在某个内存空间中写入了本应该出现的符号,但是彩色符号并没有如期产生

根据8086PC机内存地址分配的基本情况:A0000~BFFFF为显存地址空间,我所选取的a100:0000和b100:0000是在8086的显存分配地址中的,考虑到不同的计算机系统的内存空间分配情况是不同的,不知道是不是dosbox的内存分配中显存地址空间与8086PC机的显存分配空间不同才导致了修改显存中的数据不显示彩色符号。

查阅了相关的资料,dosbox显存的首地址是a100:0000,显然不是因为不同计算机系统内存空间分配情况不同导致的,网上博客的大多数说法是在执行命令之前没有进行cls操作,但是我在我的dosbox上进行cls操作之后依旧无法解决此问题。还有一个可能性,我改变了计算机的分辨率,导致了这个问题的产生。(我之前好像确实是改过计算机的分辨率,但是不确定改了什么,还需要细细探索!!!)

但在寻找该解决方案的同时,了解到在分配给显存的地址中,还可以分为a100:000开始的彩色模式以及b100:0000作为起始地址的彩色模式。

原文地址:https://www.cnblogs.com/Sun-Yiwen-blog/p/9795363.html