實驗一:

代碼如下:

從中發現,在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 也必須去掉

實驗五:

實驗六: