一、實驗任務
完成教材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:·用t命令單步執行到mov [bx],dx之前,使得ds中儲存的是c段的段位址。用d命令檢視此時的c段中的內容。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
·執行到程式結束前,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...