一、实验内容
(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段中。
二、总结与体会
这次实验前四题都完成的比较顺利,但是五六两题写得还是比较吃力的,期间出现了很多错误,导致得不到正确答案,好在通过看书、查资料也完成了这次实验。