1. 程式人生 > >匯編語言程序設計實驗報告三

匯編語言程序設計實驗報告三

內心 姓名 mage 多字節 正常 方法 bsp 不同的 程序

南京信息工程大學實驗報告

實驗名稱 實驗 3 編程、編譯、連接、跟蹤

實驗日期2018.11.18

得分

學院 計軟院

專業 計算機科學與技術

年級 2017級

班次 5班 姓名 陳奕明 學號 20171308194

一、實驗目的
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所示。


圖1-1 匯編源程序t1.asm 源代碼

第2步,對源程序 t1.asm 進行匯編、連接、運行、調試

(1) 運行程序,觀察程序輸出結果是什麽?

技術分享圖片

在屏幕上輸出結果為36

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

技術分享圖片

修改了dl寄存器的值,分別修改成6,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所示。
註*: 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。

技術分享圖片

匯編,連接,生成可執行文件:

技術分享圖片

結果得到驗證,是紅色的36

(2) 如果(1)結果得到驗證,重新打開t2.asm,嘗試將源代碼中line7的0433h→0432h, line10 的 0436h→0439h, 然後重新匯編、連接,得到可執行文件 t2.exe。使用 cls 命令清 屏後,再次觀察程序運行結果。

技術分享圖片

驗證成功,變為了紅色的29

(3) 如果(1)結果得到驗證,重新打開t2.asm,嘗試將源代碼中line7的0433h→0333h, line10 的 0436h→0336h, 然後重新匯編、連接,得到可執行文件 t2.exe。使用 cls 命令清 屏後,再次觀察程序運行結果。

技術分享圖片

第二次修改後,再次生成可執行文件:

技術分享圖片

結果如下:變為了藍色的36

四、實驗結論
1、2兩題實驗截圖和問題回答如上:


3. 延伸思考和分析 :

(1)把練習2和實驗 1「實驗任務(4)」,放到一起看,觀察並思考這兩個實驗任務之間 的關聯,結合實驗 1「實驗任務(4)」以及練習 2 中每行匯編指令的功能,理解練習 2 中程 序t2.asm實現的功能;

答:在程序t2.exe中,常數值中bh中存放的數據控制著輸出的顏色,bl中存放的數據控制著輸出的值。

(2)把練習 2 和練習 1 放到一起看,結合兩個程序各自的源代碼以及運行結果,觀察 並思考這兩個程序在實現數值顯示時不同的做法。

答: 練習一和練習二輸出的形式不同:一是用命令形式輸出,二是在debug環境下用g命令顯示器輸出。

五、總結與體會
從第一單元了解CPU的組成寄存器的基本原理到第四單元 編輯、匯編、連接了一個最基本的匯編程序,從內心感覺對於各個寄存器的具體功能以及對各個內存程序段的具體作用也有了初步的了解,期待往後的學習。

匯編語言程序設計實驗報告三