实验五

一、实验内容

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

①CPU执行程序,程序返回前,data段中的数据 不变

②CPU执行程序,程序返回前,CS= 076C ,SS= 0769 ,DS= 075A 

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

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

①CPU执行程序,程序返回前,data段中的数据 不变

②CPU执行程序,程序返回前,CS= 076C ,SS= 0769 ,DS= 075A 

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

④对于如下定义的段:

name segment

……

name ends

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

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

①CPU执行程序,程序返回前,data段中的数据 不变

②CPU执行程序,程序返回前,CS= 076A ,SS= 0769 ,DS= 075A 

③设程序加载后,code段的段地址为X,则data段的段地址为 X+3 ,stack段的段地址为 X+4

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

        第三条程序仍然可以正确执行,如果不指明入口位置,则程序从所分配的空间开始执行,前2个是数据段,只有从第3条开始是指令代码。

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

 编译、连接后,用debug调试如下:

用d命令查看得到数据相加前,逻辑段c的8个字节,如上图;

执行完实现加运算的代码后,用d命令查看逻辑段c的8个字节,如上图;

由此可得出结论,以上运算代码实现了数据相加。

6)程序如下,编写code段中代码,用push指令将a段中的前8个字型数据,逆序存储到B段中。

代码如下:

用debug调试,在push操作执行前,逻辑段b的8个字单元如下:

执行push操作后,再次查看逻辑段b的信息如下:

所以,可以得出a段中的8个字型数据逆序存储到了b段中。

 二、总结与体会

        这次实验前四题都完成的比较顺利,但是五六两题写得还是比较吃力的,期间出现了很多错误,导致得不到正确答案,好在通过看书、查资料也完成了这次实验。

原文地址:https://www.cnblogs.com/xinqimisa/p/10018071.html