1. 程式人生 > >實驗叄 程式設計、編譯、連線、跟蹤

實驗叄 程式設計、編譯、連線、跟蹤

南京資訊工程大學實驗報告

實驗名稱   實驗3 程式設計、編譯、連線、跟蹤  

實驗日期  11.12               

得分          

學院    計軟院  

專業     

年級    2017級   

班次    6班 

姓名    江軻禹        

學號    20171308227       

一、實驗目的

1. 掌握組合語言源程式(8086 dos彙編)編寫→彙編→連結→除錯的方法 2. 加深對1-4章基礎知識的理解

二、實驗準備

1. 結合第4章課件和教材,學習/複習完整彙編源程式編寫→彙編→連線→執行→除錯 的方法  2. 複習第1-3章以下基礎知識: (1)暫存器用法  ① 通用暫存器AX, BX,CX, DX     ② 段暫存器CS, DS, SS和兩個特殊暫存器IP, SP (2)記憶體訪問,特別是多位元組資料的存、取 (3)彙編指令用法,注意其合法使用形式  ① 資料傳送類指令:mov, push, pop     ② 算術運算指令:add, sub  ③ 轉移類指令:jmp

三、實驗內容

1. 練習1 第1步,編寫彙編源程式t1.asm, 源程式程式碼如圖1-1所示。

第 2頁 /共 6頁

 

圖1-1 彙編源程式t1.asm 原始碼 第2步,對源程式 t1.asm 進行彙編、連線、執行、除錯 (1) 執行程式,觀察程式輸出結果是什麼? (2) 將 line4和line9種暫存器dl 的值分別修改為 0~9 中任何一個數字,重新彙編→ 連線→執行,觀察結果的變化。  (3) 用debug對生成的可執行檔案 t1.exe 進行除錯。 ① 使用 r 命令檢視。觀察暫存器 cx 的值是 多少;觀察暫存器 ds 和 cs 的值是多 少,它們之間是否滿足關係(cs)=(ds)+10H?  ② PSP(程式段字首)的頭兩個位元組是CD 20, 用debug檢視PSP的內容,驗證是否 如此。  ③ 使用 u 命令對 t1.exe 進行反彙編,觀察反彙編得到的原始碼。 ④ 使用 t 命令和 p 命令(遇到 int 命令時,用 p 命令)單步除錯,觀察結果。

 

2. 練習2 第1步,編寫彙編源程式t2.asm,源程式程式碼如圖1-2所示。

第 3頁 /共 6頁

 

圖1-2 彙編源程式t2.asm原始碼

注*: line6-7相當於mov [0], 0433h line9-10相當於mov [2], 0436h 至於為什麼這樣使用兩條指令,而不直接簡化寫成上面的形式,有兩個原因。其中一個 是方便以後迴圈;另一個原因,留待第5章再解釋說明。暫時,先這樣使用。 第2步,對源程式 t2.asm 進行彙編、連線、執行、除錯 (1) 對t2.asm進行彙編、連線後,得到可執行檔案t2.exe。執行t2.exe,觀察程式執行 結果,驗證是否在螢幕左上方出現紅色的數值36。 注*)經測試,有些平臺在 dosbox 下執行這個程式時有些問題,如果螢幕左上方沒有 輸出結果,請執行程式t2.exe前,先輸入cls命令清空一下螢幕,然後再執行t2.exe。 (2) 如果(1)結果得到驗證,重新開啟t2.asm,嘗試將原始碼中line7的0433h→0432h, line10 的 0436h→0439h, 然後重新彙編、連線,得到可執行檔案 t2.exe。使用 cls 命令清 屏後,再次觀察程式執行結果。 (3) 如果(1)結果得到驗證,重新開啟t2.asm,嘗試將原始碼中line7的0433h→0333h, line10 的 0436h→0336h, 然後重新彙編、連線,得到可執行檔案 t2.exe。使用 cls 命令清 屏後,再次觀察程式執行結果。

 

四、實驗結論

(一)在整合環境下輸入下列指令,並執行

assume cs:code

code segment

mov ah,2

mov dl,3

add dl,30h

int 21h

 

mov ah,2

mov dl,6

add dl,30h

int 21h

 

mov ah,4ch

int 21h

code ends

end

(1) 執行程式,觀察程式輸出結果是什麼? 

 

可以看到,輸出結果為36。

 

(2) 將 line4和line9種暫存器dl 的值分別修改為 0~9 中任何一個數字,重新彙編→ 連線→執行,觀察結果的變化。

這裡將line4改為5和line9改為9

 

此時的輸出結果為59

由此可以推斷,輸出結果應該是兩個dl的值

 

(3) 用debug對生成的可執行檔案 t1.exe 進行除錯。

使用 r 命令檢視。觀察暫存器 cx 的值是 多少;觀察暫存器 ds 和 cs 的值是多 少,它們之間是否滿足關係(cs)=(ds)+10H? 

 

 

 

可以get到,ds=075AH,cs=076AH,滿足(cs)=(ds)+10H。

PSP(程式段字首)的頭兩個位元組是 CD 20, 用 debug 檢視 PSP 的內容,驗證是否

如此。

 

 

答案顯然是肯定的

 

 使用 u 命令對 t1.exe 進行反彙編,觀察反彙編得到的原始碼。

 

 使用 t 命令和 p 命令(遇到 int 命令時,用 p 命令)單步除錯,觀察結果。

 

 

 

(二)這邊在執行t2時候遇到了一些問題。。。

在整合實驗環境下執行命令時,不知為何會對mov [bx],0436h和mov [bx],0436h報錯。。。

 

個麼,直接到DOS環境下輸入命令試試?

用edit命令,然後輸入下列命令,並命名為t2.asm

 

對t2.asm 進行彙編、連結、執行、除錯

 

 

那麼問題來了。。。 對t2.asm進行彙編,連結後, 為什麼得不到結果(紅色的36?)。。。

五、總結與體會

練習二中,執行程式t2的時候

1)在整合實驗環境下,不理解對命令mov [bx],0436h和mov [bx],0436h的報錯。。。

2)在DOS環境下,不輸出結果,不知道哪邊出問題了,更別說該如何解決了QUQ。。。