实验五

实验五

计科六班    谢宏伟    20171308260  

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

先输入程序

 

先编译、连接:

在用debug加载:

 

1. CPU执行程序,程序返回前,data段中的数据为:0123H,  0456H,  0789H,  0ABCH,  0DEFH,  0FEDH,  0CBAH,  0987H

 2. CPU执行程序,程序返回前,cs=076C ,ss=076B ,ds=076A

 3. 程序加载后,code段的段地址为X,则data段的段地址为: X-2 ,stack段的段地址为: X-1

 

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

 

先编译连接:

1.CPU执行程序,程序返回前,data段中的数据为:0123h,0456h

2.CPU执行程序,程序返回前,cs= 076C,ss= 076B,ds= 076A 

3.设程序加载后,code段的段地址为:X ,则data段的段地址为:X-2,stack段的段地址为:X-1 

4.程序加载后,该段实际占有的空间为:((N+15)/16)*16 

对于第四小问,程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配16个字节。

 


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

 

 编译连接:

 

 

1. CPU执行程序,程序返回前,data段中的数据为:0123h,  0456h

2. CPU执行程序,程序返回前,cs=076A ,ss=076E ,ds=076D 

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

 

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

先执行修改后的第一个程序:

可以看出,已经不是之前的代码了;

接下来是第二个程序:

可以看出,也不是之前的代码了。

接下来是第三个程序:

 

可以看出,代码还是之前的样子。

对于将最后一条伪指令end start   改成end ;只有第三个程序是正常执行。因此可以知道。前面两个程序因为是定义的字数据在前面,先将这些数据当成指令执行了,

所以没有正常执行,而第三个程序则是先执行了指令,所以还是正常的。

 

 

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

 

 

 

 

可以看出已经加到c段了。

(6)编写code段中的代码,用push命令将a段中的前8个字型数据,逆序存储到b段中

 

 

可知,已经完成逆序存储。

 

 

实验总结:

对于段的大小,是以16个字节为单位,即使其中的数据不满16个字节,依然要用一个单位,如果是17个字节的数据,则需要32个字节,即两个单位。

对于不指名程序入口的程序,若前面有数据段,则会被计算机误以为指令,因而错误执行。

 

posted @ 2018-12-03 23:02  闪闪惹人爱~  阅读(141)  评论(0)    收藏  举报