实验五
实验五
计科六班 谢宏伟 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个字节,即两个单位。
对于不指名程序入口的程序,若前面有数据段,则会被计算机误以为指令,因而错误执行。

浙公网安备 33010602011771号