第六章实验任务(3、4)

来源:互联网 发布:网络销售哪些是违法的 编辑:程序博客网 时间:2024/05/21 10:29

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

源代码:

                        

调试过程:

  

问题1:CPU执行程序,程序返回前,data断的数据为多少?

解答:data段的数据是:144F:0000  23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00 ,结果保持变。

问题2:CPU执行程序,程序返回前,cs=144ch、ss=1450h、ds=144fh。

问题3:设程序加载后,codesg段的段地址为X,则datasg段的段地址为多少?stacksg段的段地址为多少?

解答:我们可以用命令u查看程序的代码占用了多少内存单元。

从上面的信息可以看出他占用了1Dh的内存空间,但是我们也知道段的使用时不足N/16取整后加1.所以这里的代码段占用了20h的空间。而datasg数据段的大小为16KB。所以可以得出:如果codesg段的段地址为X,则datasg数据段的段地址为X+3h,stacksg段的段地址为X+4h.

问题4:如果将第六章实验(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”.即不指出程序的入口,则则哪个程序仍然可以正确执行?请说明原因?

解答:就是本片文章能执行。因为如果把end指令后的标号start去掉后,编译器便会顺序执行程序。换句话说:当未给编译器预先的通知,要求其从哪开始执行程序时,编译器就自动以'至上向下'的顺序进行编译执行源程序。

原创粉丝点击