實驗 5 編寫 除錯具有多個段的程式

2022-06-04 16:21:10 字數 3242 閱讀 3567

一、實驗任務

完成教材133實驗5

1、將下面的程式編譯、連線,用debug載入、跟蹤,然後回答問題。

用u指令反彙編,g指令執行到001d前,得到程式返回前。

(1)cpu執行程式,程式返回前,data段中的資料為多少?

(2)cpu執行程式,程式返回前,cs=076c、ss=076b、ds=076a。

(3)設程式載入後、code段段段位址為x,則data段的段位址為x-2,stack段的段位址為x-1(通過反彙編可以得到)。

2、執行ex5_2 debug(操作同1)

(1)cpu執行程式,程式返回前,data段中的資料為多少?

(2)cpu執行程式,程式返回前,cs、ss、ds的值。

(3)設程式載入後、code段段段位址為x,則data段的段位址為x-2,stack段的段位址為x-1。

(4)對於如下定義的段:

name segment

...

name ends

如果段中的資料佔n個位元組,則程式載入後,該段實際占有的空間為:((n+15)/16)*16。 

在8086cpu架構中,每個段都是以16位元組來對齊的,即若段資料在16位元組以內,也計作16位元組。

3、執行ex5_3 debug

(1)cpu執行程式,程式返回前,data段中的資料為多少?

(2)cpu執行程式,程式返回前,cs、ss、ds的值。

(3)設程式載入後、code段段段位址為x,則data段的段位址為x+2,stack段的段位址為x+4。

4、如果將(1)(2)(3)題中的最後一條偽指令「end start」改為「end」,則哪個程式仍可以正確執行?請說明原因。 

(1)(2)無法執行,因為(1)(2)以資料段開始,找不到程式入口無法執行第一條語句。(3)以指令開始,可以執行。

5、編寫code段中的**,將a段和b段中的資料一次相加,結果存到c段中。(補充完整後**如下)

assume cs:

code

a segment

db 1,2,3,4,5,6,7,8

a ends

b segment

db 1,2,3,4,5,6,7,8

b ends

c segment

db 8 dup(0

)c ends

code segment

start:

mov bx,0

mov dx,0

mov cx,8

s:mov dx,0

movax,a

movds,ax

adddx,[bx]

movax,b

movds,ax

adddx,[bx]

movax,c

movds,ax

mov[bx],dx

incbx loop s

movax,4c00h

int21hcode ends

end start

·用t命令單步執行到mov [bx],dx之前,使得ds中儲存的是c段的段位址。用d命令檢視此時的c段中的內容。

·執行到程式結束前,d命令檢視c段內容。

實驗驗證完畢。

6、編寫code段中**,用push指令將a段中的前八個字型資料逆序儲存到b段中。

assume cs:code

a segment

dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b segment

dw 8 dup(0)

b ends

code segment

start:

mov ax,a

mov ds,ax

mov ax,b

mov ss,ax

mov sp,10h

mov bx,0

mov cx,8

s:push [bx]

add bx,2h

loop s

mov ax,4c00h

int 21h

code ends

end start

用u指令反彙編、用g指令執行到程式返回前、用d指令檢視b中內容。得到逆序。

總結:了解了暫存器分段儲存的相關知識,分段儲存更加簡潔明瞭,以及複習了棧的知識。實踐時不夠熟練,還是要多加練習。

實驗5 編寫 除錯具有多個段的程式

assume cs code,ds data,ss stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends ...

實驗 5 編寫 除錯具有多個段的

實驗任務 4 若將最後一條指令 end start 改為 end 3 中的程式仍然可以正常執行。原因 如果不指明程式的入口,程式的cs ip值沒有被設定為指向該入口,就會以程式段的第一條指令為預設入口了,然後程式會在end處結束,無法執行到 段。5 實驗 assume cs code a segme...

實驗五 編寫除錯具有多個段的程式

實驗一 將下面的程式編譯,連線,用debug載入,跟蹤,然後回答問題 執行程式截圖如下 總結 cpu執行程式,程式返回前,data段中的資料不變 cpu執行程式,程式返回前,cs 076c,ss 076b,ds 076a 設程式載入後,code段的段位址為x,則data段的段位址為x 2,stack...