概述.
1 DEBUG簡介
DEBUG是DOS的一個外部命令, 其命令格式為:
【path】DEBUG 【filename】 【parm1】 【parm2】
【path】是DEBUG命令在磁碟上的路徑
filename是要用DEBUG來處理的檔案的名字, 它包括檔案的盤符、路徑、 檔案主名和擴展名。
參數parm1和parm2是檔案filename運行時使用的參數。
當啟動DEBUG時, 將對CPU的各暫存器進行初始化:
1. 如果啟動時指定的filename是.EXE檔案, 則DEBUG啟動後將自動把指定的檔案裝入記憶體, 並置:
CS為程式代碼段段地址
IP為第一條要執行指令的偏移地址
SS為堆疊段段地址
SP為堆疊底部+1單元的偏移地址
DS和ES是裝入檔案前第一個可用記憶體段的段地址(即DEBUG程 序後的第一個段地址)
標誌暫存器的所有標誌位為0
BX(0)和CX是裝入的檔案長度
其餘暫存器為0。
2. 如果啟動DEBUG時指定的檔案filename不是.EXE檔案, 則DEBUG 將把檔案裝入記憶體, 並置:
四個段暫存器為DEBUG程式後面的第一個段地址
IP指向100H
SP指向這個段的段尾
標誌暫存器的所有標誌位為0
BX和CX是裝入的檔案長度
其餘暫存器為0。
3. 如果啟動DEBUG時不指定filename, 則只是把CPU 的各暫存器進行初始化, 初始化結果與上述的第2點相同。這時要想顯示、修改檔案,可以用DEBUG的子命令裝入檔案。
4.2 DEBUG的命令
DEBUG的命令都用單個字母表示, 其後可跟一個或多個參數, 參數之間用空格或逗號分隔。
DEBUG的命令參數大多數是地址或地址範圍, 其地址書寫格式為:
【段地址:】偏移地址
其中的段地址可以用段暫存器名表示, 也可以用一個十六進制數表示。
如: ES:100 43A5:200
地址範圍的書寫格式為:
Ⅰ. 【段地址:】起始偏移地址 終止偏移地址
Ⅱ. 【段地址:】起始領銜地址 L長度
如: CS:100 10F和CS:100 L10所指的地址範圍是一致的。
當輸入的命令不正確時, DEBUG將在該行底下指出錯誤所在。
注意: 在DEBUG下, 輸入的數據和顯示的數據都是十六進制數,不用在數據後加“H”。
彙編與反彙編命令
1.彙編命令A格式: A 【地址】
功能:從鍵盤輸入彙編程式, 並逐條地把彙編指令翻譯成機器代碼指令存入對應記憶體單元。
說明: 如果不指定彙編地址, 則以CS:IP為地址
2. 反彙編命令U
格式: U 【地址】/【地址範圍】
功能: 將指定地址範圍內的機器代碼翻譯成彙編源程式指令顯示出來, 並同時顯示地址及代碼。
注意: 反彙編時一定確認指令的起始地址, 否則得不到正確的結果。
顯示與修改記憶體單元內容的命令
1. 顯示記憶體單元內容命令D格式1: D 【地址】
格式2: D 地址範圍
說明: D命令在螢幕上顯示的內容分為三部分, 左邊是每一行存儲單元的起始地址, 中間是各位元組單元的內容, 右邊是各單元內容對應的ASCII碼字元( 不可顯示的字元用"."代替)。
2. 修改記憶體單元內容命令E
格式1: E 地址 內容表
說明: 內容表可以是以逗號或空格分隔的兩位16進制數, 也可以是用單引號''或雙引號""括起來的字元串, 還可以是二者的組合。
格式2: E 地址
說明: 在修改數據時可用以下鍵進行不同操作:
1)鍵入空格鍵。修改後一個位元組單元的內容。
2) 輸入減號"-"。另起一行, 修改前面一個位元組單元的內容。
3) 輸入回車鍵, 結束記憶體單元的修改。
3. 填充記憶體命令F
格式: F 地址範圍 內容表
功能: 將<內容表>的值逐個填入指定地址範圍, 內容表中的內容用完後再重複使用。
顯示與修改暫存器內容的R命令
格式1: R功能: 顯示當前所有暫存器內容, 狀態標誌及將要執行的下一條指令的地址、代碼和彙編指令形式。
格式2: R 暫存器名
功能: 顯示並修改指定暫存器的內容
運行和跟蹤命令
1. 運行程式命令G格式: G 【=起始地址】 【斷點地址】
功能: 從起始地址開始執行程式, 直到程式結束或遇到斷點地址為止。
說明: 如果不指定起始地址, 則從CS:IP處開始執行。
如果程式執行到結束,則顯示"Program terminated normally"(程式正常結束)。如果遇到斷點, 則程式停止執行, 並顯示當時各暫存器的內容 和下一條要執行的指令。
2. 跟蹤運行命令T
格式: T 【=起始地址】 【指令條數】
功能: 逐條跟蹤程式的運行, 同時顯示出各暫存器的內容、狀態標誌和下一條要執行的指令, 當執行夠指定的指令數後就暫停程式的運行。
說明: 如果不指定起始地址, 則從CS:IP處開始執行。
不指定指令條數時, 認為只執行一條指令。
3. 繼續命令P
格式: P 【=起始地址】 【指令條數】
功能: 與T命令一樣完成跟蹤程式的運行, 但遇到子程式、中斷程式、循環時並不跟蹤下去, 而是把它們當作一條指令來執行。
磁碟讀寫命令
1. 檔案命名命令N格式: N檔案名稱
功能: 指定要裝入記憶體或寫到磁碟的檔案的名字(包括盤符和路徑)。
2. 裝入命令L
格式: L 【地址】 【驅動器號 扇區號 扇區數】
功能: 把指定檔案或磁碟扇區的內容裝入到記憶體指定地址
說明: 地址的默認值為CS:100。
驅動器號用0表示A盤, 1表示B盤, 2表示C糟。
3. 寫磁碟命令W
格式: W 【地址】 【驅動器號 扇區號 扇區數】
功能: 將指定記憶體地址的一片單元內容寫到磁碟中。
說明: 地址的默認值為CS:100。
要將記憶體內容寫入檔案時, 必須先用N命令命名一個檔案,並置BX和CX為檔案長度。
注意: W命令不能寫入以.EXE和.HEX為擴展名的檔案。
DEBUG的其它命令
1. 移動記憶體命令格式: M 源地址範圍 目標起始地址
功能: 把<源地址範圍>中的內容順序移到<目標起始地址>起的一片連續記憶體單元。
注意: 源區域的數據不因移動而消失, 其內容仍保持不變。
源、目標中的地址只要不指定段地址, 則都是隱含使用DS段。
2. 比較命令C
格式: C 源地址範圍 目標起始地址
功能: 從<源地址範圍>的起始地址單元開始, 逐個與<目標起始地址>後的單元的內容順序進行比較, 直到源終止地址為止。遇到不相同時顯示出它們的地址和內容: 源地址 源內容 目標內容 目標地址
3. 查找命令S
格式: S 地址範圍 要查找的內容
功能: 在指定的地址範圍內查找指定的內容, 若找到則顯示出它們所
處的地址, 否則不顯示任何信息。
4. 十六進制算術運算命令H
格式: H 值1 值2
功能: 顯示十六進制數<值1>與<值2>的和差的結果。
5. 退出DEBUG命令Q
格式: Q
功能: 結束DEBUG程式, 返回到DOS提示符下。
注意: Q命令並不把記憶體中正在工作的檔案存檔。_