1. 掌握彙編語言源程序(8086 dos 彙編)編寫→彙編→連接→調試的方法編程
2. 加深對 1-4 章基礎知識的理解學習
1. 結合第 4 章課件和教材,學習/複習完整彙編源程序編寫→彙編→鏈接→運行→調試 的方法測試
2. 複習第 1-3 章如下基礎知識:spa
(1)寄存器用法操作系統
① 通用寄存器 AX, BX,CX, DXdebug
② 段寄存器 CS, DS, SS 和兩個特殊寄存器 IP, SP3d
(2)內存訪問,特別是多字節數據的存、取調試
(3)彙編指令用法,注意其合法使用形式blog
① 數據傳送類指令:mov, push, pop內存
② 算術運算指令:add, sub
③ 轉移類指令:jmp
1. 練習 1
(1)編寫彙編源程序 t1.asm
爲了方便後續操做,選擇在masm.exe,link.exe同文件夾下用notepad編寫該彙編程序,將文件後綴名更改成.asm
(2)對源程序 t1.asm 進行彙編、鏈接、運行、調試 (1) 運行程序,觀察程序輸出結果是什麼
(顯然咱們須要使用DS Box來完成這次實驗,實驗前依然須要掛載,這個操做在第一次實驗時就有過,
這次步驟就省去不表示。)
爲了不在編譯,鏈接過程當中產生一些中間文件的過程,這裏在語句後面加一個分號
能夠看出運行結果是輸出了36
(3) 將 line4 和 line9 種寄存器 dl 的值分別修改成 0~9 中任何一個數字,從新彙編→ 鏈接→運行,觀察結果的變化。
隨機的修改數字
儘管在語句後加分號省去了生成編譯,鏈接中間文件的過程,但這些相同的步驟依然很麻煩,能夠省去
在notepad中寫入以下代碼,命名爲process,後綴改成.bat
在這裏發現編譯,鏈接,執行的過程都已經省去,只須要輸入process t1
在分別修改了數字後發現輸出結果改變了,儘管這段代碼還不太理解,但能夠大體知道,這兩行
應該是決定了輸出的結果
(4) 用 debug 對生成的可執行文件 t1.exe 進行調試。
① 使用 r 命令查看。觀察寄存器 cx 的值是 多少;觀察寄存器 ds 和 cs 的值是多 少,它們之間是否知足關係(cs)=(ds)+10H
寄存器CX的值是16,代表這段代碼的機器碼長度是16。
DS=075a,CS=076a。必然的二者相差10h,即知足(cs)=(ds)+10H,
也就是說PSP區:075a:0,程序區:076a:0
② PSP(程序段前綴)的頭兩個字節是 CD 20, 用 debug 查看 PSP 的內容,驗證是否 如此。
使用d命令查看075a(即DS寄存器)開始的內存中的內容,顯然前十個長度的內存內容爲PSP區內容,確實頭兩個字節爲CD 20
③ 使用 u 命令對 t1.exe 進行反彙編,觀察反彙編獲得的源代碼。
程序入口地址CS:IP=076a:0,而CX=16表示的是程序機器碼長度,因此在反彙編時能夠準確反彙編出程序段內容
④ 使用 t 命令和 p 命令(遇到 int 命令時,用 p 命令)單步調試,觀察結果。
這裏沒有什麼異常,程序按順序步驟執行,遇到int用p指令,最終正常終止
這裏除了CS:IP的值發生了改變,AX,BX寄存器的值也發生了改變。
2. 練習 2
(1)編寫彙編源程序 t2.asm
爲了方便後續操做,選擇在masm.exe,link.exe同文件夾下用notepad編寫該彙編程序,將文件後綴名更改成.asm
(2)對源程序 t2.asm 進行彙編、鏈接、運行、調試
(3) 對 t2.asm 進行彙編、鏈接後,獲得可執行文件 t2.exe。運行 t2.exe,觀察程序運行 結果,驗證是否在屏幕左上方出現紅色的數值 36。
注*)經測試,有些平臺在 dosbox 下運行這個程序時有些問題,若是屏幕左上方沒有 輸出結果,請運行程序 t2.exe 前,先輸入 cls 命令清空一下屏幕,而後再執行 t2.exe。
在使用process.bat一次性編譯,鏈接,執行後發現並無出現預期的紅色36
在清屏終於出現了預期的結果,在屏幕左上方出現了紅色的36
(4) 若是(1)結果獲得驗證,從新打開 t2.asm,嘗試將源代碼中 line7 的 0433h→0432h, line10 的 0436h→0439h, 而後從新彙編、鏈接,獲得可執行文件 t2.exe。使用 cls 命令清 屏後,再次觀察程序運行結果。
在修改後再次運行,發如今左上方仍然出現了紅色的36
(5) 若是(1)結果獲得驗證,從新打開 t2.asm,嘗試將源代碼中 line7 的 0433h→0333h, line10 的 0436h→0336h, 而後從新彙編、鏈接,獲得可執行文件 t2.exe。使用 cls 命令清 屏後,再次觀察程序運行結果。
這次在左上方出現了藍色的36
1.在以前的實驗中因爲只是在學習操做記憶Debug的各類命令,感受很枯燥;
但在此次實驗後發現Debug調試在彙編程序的查錯過程當中頗有幫助
2.任何重複的機械的操做均可以化繁爲簡,咱們減小沒必要要無心義的操做。
3.一個簡單的彙編程序實現起來並不容易,彙編語言寫程序和高級語言有很大區別
,但也有類似的地方。
4.咱們學習彙編語言是爲了直接控制重重覆蓋的操做系統軟件下的硬件