实验一:

代码如下:

从中发现,在CPU和程序执行前,data中的值保持不变,并且cs=076c,ss=0769,ds=075A。

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

实验二:

代码如下:

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

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

实验三:

代码如下:

从中发现,CPU执行程序,程序返回前,data段中的数据不变,CPU执行程序,程序返回前,cs=076a,ss=076e,ds=076d。设程序加载后,code段的段地址为X,则data段的段地址为:X+3,stack的段地址为:X+4

实验四:

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

1和2不能正确执行,反汇编出来的代码并不是我们之前输入的,所以执行失败。而3的data和stack都在code之后,所以ip本来就为0,可以正确执行。其中 start 可以用其他字符代替,但是对应的end start 中的start 也必须用同字符代替。 若第一个strat缺省,则end strat中的 strat 也必须去掉

实验五:

实验六: