编程语言
首页 > 编程语言> > 实验1 8086汇编指令编码和调试

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

作者:互联网

实验结论

实验任务2

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

 

 

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

下面试图修改它

 

 

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

实验任务3

使用e命令修改内存单元

以下是原内存内容

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

 

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

 

 实验结论4

逻辑地址是 20:30

物理地址是 00230H

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

 

 

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

 

 单步执行程序

 

查看栈空间中的数据

 

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

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

 

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

下面改变代码的内容:

 

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

 

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

实验任务5

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

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

 

 单步执行汇编代码

 

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

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

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

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

实验任务6

以下是代码截图

 

 以下是编译和链接的过程

 

 下面是程序执行的结果

 

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

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

实验任务7

补全之后的源代码:

 

第一空填code 

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

第二空填0018h

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

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

 

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

实验总结

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

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

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

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

 

标签:编码,8086,代码,写入,实验,内存,单步,内容,调试
来源: https://www.cnblogs.com/tianhangriver/p/15440897.html