實驗叄 程式設計、編譯、連線、跟蹤
南京資訊工程大學實驗報告
實驗名稱 實驗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。。。