实验五 编写,调试具有多个段的程序

时间:2021-10-24 01:24:45

一、实验目的
1. 理解和掌握将数据、代码、栈放入不同段的程序的编写和调试
2. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式

二、实验准备
1. 结合第 6 章教材和课件,复习第 6 章内容
2. 复习第 3 章「栈」的知识

三、实验内容

(1)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。

实验五 编写,调试具有多个段的程序

①CPU执行程序,程序返回前,data段的数据为多少?

见下图d 0770:0000 000f结果。

②CPU执行程序,程序返回前,cs= 0772h 、ss=  0771h  、ds= 0770 h  。

③设程序加载后,code段的段地址为X,则data段的段地址为 X-2  、stack段的段地址为 X-1。

执行结果截图如下:

实验五 编写,调试具有多个段的程序

 

(2)将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

实验五 编写,调试具有多个段的程序

(1)CPU执行程序,程序返回前,data段中的数据 不变 。

(2)CPU执行程序,程序返回前,CS= 076CH ,SS= 076BH ,DS= 076AH 。

(3)设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。

(4)对于如下定义的段:

name segment

……

name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为 ((N+15)/16)*16 。

运行结果截图:

实验五 编写,调试具有多个段的程序

 

 (3)将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

实验五 编写,调试具有多个段的程序

  (1)CPU执行程序,程序返回前,data段中的数据 不变 。

  (2)CPU执行程序,程序返回前,CS= 076AH ,SS= 076EH ,DS= 076DH 。

  (3)设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X+3 ,STACK段的段地址为 X+4 。

调试结果截图:

实验五 编写,调试具有多个段的程序

 

(4)如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?说出原因。

     根据以上的分析可得,我认为(3)仍然可以继续执行,因为(1)和(2)都改变了原来SS的值。

 

(5)程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存放到c段中。

实验五 编写,调试具有多个段的程序

调试结果截图:

实验五 编写,调试具有多个段的程序

 

四、实验结论

通过本次实验,发现自己还存在许多不足,对前面的知识点的掌握不够清晰,也不够牢固。