使用d命令查看生产时期的截图
可见,FFF0:0053处起的一串信息为生产日期
下面试图修改它
可见我们不能够修改这些信息,原因可能是这些重要信息记载在只读存储器上,不能被修改
使用e命令修改内存单元
以下是原内存内容
以下是使用e命令修改内存之后的效果
以下是使用f命令修改内存之后的效果
逻辑地址是 20:30
物理地址是 00230H
以下是将内容写入内存的过程
以下是写入汇编代码的过程
单步执行程序
查看栈空间中的数据
此时栈中的数据已经正确写入
然后使用d指令查看内存中的内容
可以看见,内存中的内容并没有改变
下面改变代码的内容:
单步执行后,查看内存中的内容
可以看见,内存中的内容发生了变化
在执行代码之前首先向栈空间中写入零数据
然后向内存中写入汇编代码
单步执行汇编代码
可见两条指令执行期间没有中断
因为如果ss和sp的修改是连续的两步,那么cpu不会中断,否则会造成栈错位
而且在执行的过程中,栈空间中的内容有变化
内存单元有变化,可能是cpu在中断过程中向栈中填入了中断信息
以下是代码截图
以下是编译和链接的过程
下面是程序执行的结果
使用d命令查看程序的前缀内容:
发现前两个字节确实是CD 20
补全之后的源代码:
第一空填code
因为我们需要复制的是本程序的源代码,所以我们把代码段寄存器的内容送入ds,以待拷贝
第二空填0018h
第二空是循环的次数,也就是我们需要拷贝的数据的字节数,经过u命令查询,发现一共有18h个字节,所以此处填写18h
以下是执行代码,并反汇编查询的过程
可见,源代码已经正确地被拷贝
经过这次的实验,我学到了非常多的东西
首先是熟悉了debug程序的使用,能够基本记住每个命令的功能,不需要等到要用了采取查功能
其次是对栈和循环之类的知识有了更深的理解,实验之后有了更实切具体的体会
也学到了一些新知识,比如在做实验5的时候,查阅书本知识,顺便了解了debug中断单步调试具体的实现原理,也就能够了解为什么ss和sp连续改变的时候,cpu不会产生中断