- 5
- 0
- 约2.28千字
- 约 7页
- 2017-08-12 发布于天津
- 举报
第二章Debug的编译与执行.doc
第二章 Debug的組譯與執行
工欲善其事,必須先利其器,學習組合語言也是如此。本章的工作即是要使用Debug 完成組合語言的組譯與執行。Debug.exe所在資料夾是C:\WINDOWS\System32,只要執行debug,即可進入此應用程式,如下圖所示:
進入Debug後如下圖,其命令提示字元是”-“。
Debug常用的指令如下表:
指令 功能 語法 a 編寫與組譯 a 起始位址 g 執行程式 d 傾印記憶體 d起始位址,結束位址 u 傾印記憶體與程式 u起始位址,結束位址 e 修改記憶體內容 e 起始位址 r 顯示或修改暫存器內容 共有3種語法,分別如下:
r (顯示暫存器內容)
r 暫存器 (修改暫存器)
rf (修改旗號) n 設定檔名 n 檔名 w 儲存程式 l 載入程式 m 搬移記憶體 m 起始位址,結束位址,目的位址 t 單步執行程式 q 離開Debug
編寫與組譯
編寫與組譯的指令是a。例如,若有程式如下:(其功能是於螢幕顯示”A”)
MOV DL,41
MOV AH,2
INT 21
INT 20
欲於Debug輸入並執行此程式。此時請鍵入
a100
如下圖,其中100是組合語言規定的程式起始位址。下圖的0AED稱為段位址(segment address),0100稱為偏移位址(offset address)。其次,每一台電腦或每次編寫程式時,其段位址不一定相同。
請輸入
mov dl,41
且大小寫不拘,如下圖:
請逐一輸入
mov ah,2
int 21
int 20
並於最後一列按一下Enter 鍵,如下圖:
執行程式
執行程式的指令是g。例如,於上圖鍵入g,即可執行以上程式,如下圖所示:
傾印記憶體
傾印記憶體的指令是d。例如,輸入
d100,107
其中100與107分別代表起始位址與結束位址。如下圖所示:
代表以上程式經組譯後的機器碼,分別是
B2 41 B4 02 CD 21 CD 20
傾印記憶體與程式
傾印記憶體與程式的指令是u。例如,輸入
u100,107
其中100與107分別代表起始位址與結束位址。如下圖所示:
修改記憶體
修改記憶體的指令為e。例如,以上程式的機器碼
B2 41 B4 02 CD 21 CD 20
亦可鍵入
e100
後,逐一鍵入以上機器碼,如下圖所示,請逐一輸入b2 Space 41 Space b4 Space 02 Space cd Space 21 Space cd Space 20 Space:(Space 代表空白鍵)
下圖是傾印記憶體與程式的結果:
請讀者自行執行以上程式。
顯示或修改暫存器內容
顯示或修改暫存器內容的指令是r。例如,
r
可顯示暫存器的內容,如下圖所示。又例如,
rax
可修改ax的內容,如下圖所示ax暫存器已經修改為1234。
儲存程式
儲存程式的步驟如下:
1、檔案命名。檔案命名的指令是n,檔案名稱的命名規則同Windows,且檔案的附屬檔名必須是.com。
2、輸入檔案長度。檔案長度的高位元使用bx,低位元使用cx。例如,上例的檔案長度是08(從100至107共8個位元組),所以bx填入0,cx填入08,如下圖所示。
3、儲存程式。儲存程式的指令是w,如下圖所示:
以下是以檔案總管觀察的結果。
此時即可使用按兩下的方式,執行。
載入程式
載入程式的步驟如下:
1、輸入檔案名稱。輸入檔案名稱的指令同為n,如下圖:
2、載入程式。載入程式的指令是l,如下圖所示:
搬移記憶體
搬移記憶體的指令是m。例如,若要於位址102的地方插入一列指令,此時即可將102至107的記憶體內容搬至104起始的地方,如下圖所示:
m 102,107,104
此時即可使用 a102鍵入所需插入的指令。(附註:於實務的應用,還需先測試所需插入指令的長度)
單步執行程式
單步執行程式的指令是t,其功能是可逐一觀察每一指令的執行結果。例如,下圖是執行
mov dl,41
的結果。dl暫存器已經修改為0041。
因為Debug無法追蹤中斷服務程式,所以若要單步執行,請先將INT 21 修改為NOP。且因為INT 21佔用兩個記憶體,所以請以兩個NOP取代INT 21。其次,INT 20既然無法追蹤其執行過程,當然IP無法自動修正為0100,所以若要再次執行程式,請記得以手動的方式修改IP值為100,如以下敘述
-rip
離開Debug
離開Debug的指令是q。
進位制
Debug環境的進位制預設為16進位,且所有暫存器、記憶體與立即值均為十六進位制。其次,第十一章起將改為使用Masm組譯程式,
原创力文档

文档评论(0)