实验1 8086汇编指令编码和调试

实验结论

实验任务2

使用d命令查看生产时期的截图

实验1 8086汇编指令编码和调试

 

 

 可见,FFF0:0053处起的一串信息为生产日期

下面试图修改它

实验1 8086汇编指令编码和调试

 

 

 可见我们不能够修改这些信息,原因可能是这些重要信息记载在只读存储器上,不能被修改

实验任务3

使用e命令修改内存单元

以下是原内存内容

实验1 8086汇编指令编码和调试

以下是使用e命令修改内存之后的效果

实验1 8086汇编指令编码和调试

 

 以下是使用f命令修改内存之后的效果

实验1 8086汇编指令编码和调试

 

 实验结论4

逻辑地址是 20:30

物理地址是 00230H

以下是将内容写入内存的过程

实验1 8086汇编指令编码和调试

 

 

以下是写入汇编代码的过程

实验1 8086汇编指令编码和调试

 

 单步执行程序

实验1 8086汇编指令编码和调试

 

查看栈空间中的数据

实验1 8086汇编指令编码和调试

 

 此时栈中的数据已经正确写入

 然后使用d指令查看内存中的内容

实验1 8086汇编指令编码和调试

 

 可以看见,内存中的内容并没有改变

下面改变代码的内容:

实验1 8086汇编指令编码和调试

 

 单步执行后,查看内存中的内容

实验1 8086汇编指令编码和调试

 

 可以看见,内存中的内容发生了变化

实验任务5

在执行代码之前首先向栈空间中写入零数据

实验1 8086汇编指令编码和调试

然后向内存中写入汇编代码

实验1 8086汇编指令编码和调试

 

 单步执行汇编代码

实验1 8086汇编指令编码和调试

 

可见两条指令执行期间没有中断

因为如果ss和sp的修改是连续的两步,那么cpu不会中断,否则会造成栈错位

而且在执行的过程中,栈空间中的内容有变化

实验1 8086汇编指令编码和调试

内存单元有变化,可能是cpu在中断过程中向栈中填入了中断信息

实验任务6

以下是代码截图

实验1 8086汇编指令编码和调试

 

 以下是编译和链接的过程

实验1 8086汇编指令编码和调试

 

 下面是程序执行的结果

实验1 8086汇编指令编码和调试

 

 使用d命令查看程序的前缀内容:

实验1 8086汇编指令编码和调试

发现前两个字节确实是CD 20

实验任务7

补全之后的源代码:

实验1 8086汇编指令编码和调试

 

第一空填code 

因为我们需要复制的是本程序的源代码,所以我们把代码段寄存器的内容送入ds,以待拷贝

第二空填0018h

第二空是循环的次数,也就是我们需要拷贝的数据的字节数,经过u命令查询,发现一共有18h个字节,所以此处填写18h

以下是执行代码,并反汇编查询的过程

实验1 8086汇编指令编码和调试

 

 可见,源代码已经正确地被拷贝

实验总结

经过这次的实验,我学到了非常多的东西

首先是熟悉了debug程序的使用,能够基本记住每个命令的功能,不需要等到要用了采取查功能

其次是对栈和循环之类的知识有了更深的理解,实验之后有了更实切具体的体会

也学到了一些新知识,比如在做实验5的时候,查阅书本知识,顺便了解了debug中断单步调试具体的实现原理,也就能够了解为什么ss和sp连续改变的时候,cpu不会产生中断

 

上一篇:实验1 8086汇编指令编码和调试


下一篇:实验1 8086汇编指令编码和调试