实验 3 编程,编译,连接,跟踪
一、實驗目的
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
為了方便后續操作,選擇在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.我們學習匯編語言是為了直接控制重重覆蓋的操作系統軟件下的硬件
轉載于:https://www.cnblogs.com/mr-gao1/p/9971898.html
總結
以上是生活随笔為你收集整理的实验 3 编程,编译,连接,跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动发帖子-博客园
- 下一篇: 前端开发之模块化初探