第二章Debug的编译与执行.docVIP

  • 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)

1亿VIP精品文档

相关文档