DEBUG是一個DOS實用程式,是供程式設計師使用的程式除錯工具,可以用它檢查記憶體中任何地方的位元組以及修改任何地方的位元組。它可以用於逐指令執行某個程式以驗證程式執行的正確性,也可以追蹤執行過程、比較一個指令執行前後的值以及比較與移動記憶體中資料的範圍,讀寫檔案與磁碟扇區。
它的功能包括以下幾個方面。
⒈ 直接輸入,更改,跟蹤,執行組合語言源程式;
⒉ 觀察作業系統的內容;
3.檢視ROM BIOS的內容;
⒋觀察更改RAM內部的設定值;
⒌以扇區或檔案的方式讀寫軟盤資料。
A 彙編命令
功能: 將指令直接彙編成機器碼輸入到記憶體中。
說明: 用於小段程式的彙編及修改目標程式,所有輸入的數字均採用十六進位制, 使用者裝入記憶體的彙編語句是連續存放的,若沒有指定地址,並且前面沒有使用匯編命令,該語句被彙編到 CS:0100區域。
例A:>DEBUG
-a 0100
08F1:0100 MOV AH,09
08F1:0102 MOV DX,109
08F1:0105 INT 21H;
08F1:0107 INT 21H;<-XP下執行cmd debug時,應該是INT 20H,21H會出遇無效指令錯誤
08F1:0109 db "May I help you $"
08F1:0115←離開a狀態
-g ←執行
May I help you 執行結果
Program terminated normally表示執行正常
C比較命令
功能: 比較兩記憶體區域中的內容是否相同,若不同則顯示其地址和內容。
如:C4000:0 3F 100
就是用來比較4000:0000-4000:003F與DS:0100-DS:013F之間的內容:其顯示格式如下:
記憶體地址1內含值1內含值2記憶體地址2
例:比較4000:0 3F 100內容的差異
-C4000:0 3F 100
4000:0000 64 43 08F1:0100
4000:0001 3E 69 08F1:0101 顯示內容的差異處
4000:0002 78 FF 08F1:0102
……………………………………
如果要比較的範圍在DS內,則段地址不必指出:
如:-C 0 4 100;比較DS:0---DS:4與DS:100---DS:104
C命令的另一種格式如下:C地址1 L 長度 地址2
如:-C000:0 L4 0;由0000:0與與DS:0開始比較它同-C0000:0 3 0命令相等,顯示結果如下:
0000:0000 8A C0 08F1:0000
0000:0001 10 20 08F1:0001 它們都比較4個位元組
0000:0002 1C 00 08F1:0002
0000:0003 49 7F 08F1:0003
轉儲命令
* D[地址] 或D[起始地址][目的地址] 轉儲命令
功能: 以記憶體映象方式顯示記憶體中的資訊。
說明: 轉儲用左右兩部分顯示記憶體映象內容,左邊以十六進位制,右邊以ASCⅡ字元顯示,所有不可列印字元用句號(。)表示。每行顯示16個位元組的內容,在第八和第九個位元組之間有一個連字元 - 此命令隱含的段地址為DS的值。若未指定起始地址,則D命令從顯示的最後一個單元的下一個單元開始顯示,若以前沒有使用給D命令, 則從初使化的段暫存器的內容,加上地址偏移量 0100H 開始顯示。
例:-d10,4f即為顯示DS:4f的內容在D命令中如不指出段地址,則其預設為DS段。
如指明段地址,則從指明的段地址列出指定的範圍
如:-dfff:00:0f
我們也可以指定長度來列出所需要記憶體內容
如:-d 100 L20即為顯示由DS:100-DS:11F的內容,共20H個位元組:
* E[地址] [位元組串) 修改記憶體命令
功能: 從指定的地址開始修改記憶體值。
格式:E起始地址[資料行]
⑴用給定內容代替指定範圍的單元內容
-E地址 內容表
例:-E100 41 42 43 44 48 47 46 45
-D 100,L08
08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE…
⑵逐個記憶體內容
例:-E 100:
08F1:0100 76 42 :42是操作員鍵入
此命令是將原100號記憶體內容76修改為42,用D命令可察看。
* F[地址範圍] [位元組或位元組串] 填寫命令
功能: 將要填寫的位元組或位元組串填入由地址範圍指定的儲存器中。
例:-f100 120 61 62 63 64
-d100 11f
08F1:0100 61 62 63 64 61 62 63 64 -61 62 63 64 61 62 63 abcd abcd abcd abcd
08F1:0110 13 67 98 E3 C8 2E B3 B6 -03 21 AC 19 3121 4E 96 g……1…
如果資料行超出指定的範圍,則填不下的數值會被忽略。
例:-f 100 107 41 43 43 44 45 46 47 48 49 4A 4B 4C 4D -d 100,lof
08F1:0100 41 42 43 44 45 46 47 64 -61 62 63 64 ABCDEFGdabcdabcd
由上例可看出,超出範圍的資料被忽略
另外,F和E命令都可填入字串:
如:-F 100 105 "MSDOS"
-d 100 l0f
08F1:0100 4D 53 44 4F 53 46 47 64 -61 62 63 64 MS DOS FGabcd abcd
G執行命令
功能: 執行正在除錯的程式,當達到斷點時停止執行, 並且顯示暫存器標誌和下一條要執行的命令。
說明: 如果沒有指定起始地址,那麼當前指令地址由CS,IP暫存器的內容來決定,如果使用者指定起始地址就從指定的起始地址開始執行。如果指定斷點,當指令到達指令地址時停止執行,並顯示各暫存器標誌位的內容和下一條要執行的命令,最多允許使用者設定10個斷點。
例:A:\>debug tan.exe
-u:反編譯成組合語言程碼
…………
. .
-g 100 指定中斷點
Program terminated normally:
另外:我們在DEBUG下可執行一個檔案.EXE
如:A:\>debug tan.exe
-g
即可開始執行此程式,和在DOS下完全一樣:
* H[數值][數值] 十六進位制算術運算命令
功能: 分別顯示兩個十六進位制數相加的和以及第一個數減去第二個數的差。
說明: 替使用者完成簡單的十六進位制數的運算。
例:-h4538 5623
9B5B EF15
I命令
功能: 從指定的埠輸入並顯示(用十六進位制)的一個位元組。
例:-i70
F9;顯示70埠的內容為F9
I命令可由80X86的64K個埠取資料
L命令
功能: 將一個檔案或盤的絕對扇區裝入儲存器。
說明: 單個L命令能夠裝入的最大扇區數是 80H,其中盤號 0,1,2,3……分別代表 A,B,C,……出現讀盤錯,顯示錯誤資訊。
⑴格式1.L裝入地址 驅動器名 起始扇區/扇區數
這種方式可把磁碟上指定扇區範圍的內容裝入到儲存器從指定地址開始的區域中,在此外扇區編號引用邏輯/扇區的方式。
例:-L 100 0 01,將A驅的0扇區裝至CS:100上
-d 100 10f
08F1:0100 EB 3C 90 3C 53 44 4F 53 -36 2E 32 32 02 01 01 00.L,MSDOS 6.22……
⑵格式2:L裝入地址
這種方式可把指定檔案裝入記憶體,裝入的檔案可在進入DEBUG時指定亦可用N命令建立,格式為-n檔名:
例1 DEBUG tan.pas
-L 100
例2 DEBUG
-n tan.pas
須知:L命令只能讀取邏輯扇區,不能讀取硬碟分割槽表
L命令中所用的磁碟程式碼A=00,B=01,C=02……
DEBUG是一個DOS實用程式,是供程式設計師使用的程式除錯工具,可以用它檢查記憶體中任何地方的位元組以及修改任何地方的位元組。它可以用於逐指令執行某個程式以驗證程式執行的正確性,也可以追蹤執行過程、比較一個指令執行前後的值以及比較與移動記憶體中資料的範圍,讀寫檔案與磁碟扇區。
它的功能包括以下幾個方面。
⒈ 直接輸入,更改,跟蹤,執行組合語言源程式;
⒉ 觀察作業系統的內容;
3.檢視ROM BIOS的內容;
⒋觀察更改RAM內部的設定值;
⒌以扇區或檔案的方式讀寫軟盤資料。
A 彙編命令
功能: 將指令直接彙編成機器碼輸入到記憶體中。
說明: 用於小段程式的彙編及修改目標程式,所有輸入的數字均採用十六進位制, 使用者裝入記憶體的彙編語句是連續存放的,若沒有指定地址,並且前面沒有使用匯編命令,該語句被彙編到 CS:0100區域。
例A:>DEBUG
-a 0100
08F1:0100 MOV AH,09
08F1:0102 MOV DX,109
08F1:0105 INT 21H;
08F1:0107 INT 21H;<-XP下執行cmd debug時,應該是INT 20H,21H會出遇無效指令錯誤
08F1:0109 db "May I help you $"
08F1:0115←離開a狀態
-g ←執行
May I help you 執行結果
Program terminated normally表示執行正常
C比較命令
功能: 比較兩記憶體區域中的內容是否相同,若不同則顯示其地址和內容。
如:C4000:0 3F 100
就是用來比較4000:0000-4000:003F與DS:0100-DS:013F之間的內容:其顯示格式如下:
記憶體地址1內含值1內含值2記憶體地址2
例:比較4000:0 3F 100內容的差異
-C4000:0 3F 100
4000:0000 64 43 08F1:0100
4000:0001 3E 69 08F1:0101 顯示內容的差異處
4000:0002 78 FF 08F1:0102
……………………………………
如果要比較的範圍在DS內,則段地址不必指出:
如:-C 0 4 100;比較DS:0---DS:4與DS:100---DS:104
C命令的另一種格式如下:C地址1 L 長度 地址2
如:-C000:0 L4 0;由0000:0與與DS:0開始比較它同-C0000:0 3 0命令相等,顯示結果如下:
0000:0000 8A C0 08F1:0000
0000:0001 10 20 08F1:0001 它們都比較4個位元組
0000:0002 1C 00 08F1:0002
0000:0003 49 7F 08F1:0003
轉儲命令
* D[地址] 或D[起始地址][目的地址] 轉儲命令
功能: 以記憶體映象方式顯示記憶體中的資訊。
說明: 轉儲用左右兩部分顯示記憶體映象內容,左邊以十六進位制,右邊以ASCⅡ字元顯示,所有不可列印字元用句號(。)表示。每行顯示16個位元組的內容,在第八和第九個位元組之間有一個連字元 - 此命令隱含的段地址為DS的值。若未指定起始地址,則D命令從顯示的最後一個單元的下一個單元開始顯示,若以前沒有使用給D命令, 則從初使化的段暫存器的內容,加上地址偏移量 0100H 開始顯示。
例:-d10,4f即為顯示DS:4f的內容在D命令中如不指出段地址,則其預設為DS段。
如指明段地址,則從指明的段地址列出指定的範圍
如:-dfff:00:0f
我們也可以指定長度來列出所需要記憶體內容
如:-d 100 L20即為顯示由DS:100-DS:11F的內容,共20H個位元組:
* E[地址] [位元組串) 修改記憶體命令
功能: 從指定的地址開始修改記憶體值。
格式:E起始地址[資料行]
⑴用給定內容代替指定範圍的單元內容
-E地址 內容表
例:-E100 41 42 43 44 48 47 46 45
-D 100,L08
08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE…
⑵逐個記憶體內容
例:-E 100:
08F1:0100 76 42 :42是操作員鍵入
此命令是將原100號記憶體內容76修改為42,用D命令可察看。
* F[地址範圍] [位元組或位元組串] 填寫命令
功能: 將要填寫的位元組或位元組串填入由地址範圍指定的儲存器中。
例:-f100 120 61 62 63 64
-d100 11f
08F1:0100 61 62 63 64 61 62 63 64 -61 62 63 64 61 62 63 abcd abcd abcd abcd
08F1:0110 13 67 98 E3 C8 2E B3 B6 -03 21 AC 19 3121 4E 96 g……1…
如果資料行超出指定的範圍,則填不下的數值會被忽略。
例:-f 100 107 41 43 43 44 45 46 47 48 49 4A 4B 4C 4D -d 100,lof
08F1:0100 41 42 43 44 45 46 47 64 -61 62 63 64 ABCDEFGdabcdabcd
由上例可看出,超出範圍的資料被忽略
另外,F和E命令都可填入字串:
如:-F 100 105 "MSDOS"
-d 100 l0f
08F1:0100 4D 53 44 4F 53 46 47 64 -61 62 63 64 MS DOS FGabcd abcd
G執行命令
功能: 執行正在除錯的程式,當達到斷點時停止執行, 並且顯示暫存器標誌和下一條要執行的命令。
說明: 如果沒有指定起始地址,那麼當前指令地址由CS,IP暫存器的內容來決定,如果使用者指定起始地址就從指定的起始地址開始執行。如果指定斷點,當指令到達指令地址時停止執行,並顯示各暫存器標誌位的內容和下一條要執行的命令,最多允許使用者設定10個斷點。
例:A:\>debug tan.exe
-u:反編譯成組合語言程碼
…………
. .
-g 100 指定中斷點
Program terminated normally:
另外:我們在DEBUG下可執行一個檔案.EXE
如:A:\>debug tan.exe
-g
即可開始執行此程式,和在DOS下完全一樣:
* H[數值][數值] 十六進位制算術運算命令
功能: 分別顯示兩個十六進位制數相加的和以及第一個數減去第二個數的差。
說明: 替使用者完成簡單的十六進位制數的運算。
例:-h4538 5623
9B5B EF15
I命令
功能: 從指定的埠輸入並顯示(用十六進位制)的一個位元組。
例:-i70
F9;顯示70埠的內容為F9
I命令可由80X86的64K個埠取資料
L命令
功能: 將一個檔案或盤的絕對扇區裝入儲存器。
說明: 單個L命令能夠裝入的最大扇區數是 80H,其中盤號 0,1,2,3……分別代表 A,B,C,……出現讀盤錯,顯示錯誤資訊。
⑴格式1.L裝入地址 驅動器名 起始扇區/扇區數
這種方式可把磁碟上指定扇區範圍的內容裝入到儲存器從指定地址開始的區域中,在此外扇區編號引用邏輯/扇區的方式。
例:-L 100 0 01,將A驅的0扇區裝至CS:100上
-d 100 10f
08F1:0100 EB 3C 90 3C 53 44 4F 53 -36 2E 32 32 02 01 01 00.L,MSDOS 6.22……
⑵格式2:L裝入地址
這種方式可把指定檔案裝入記憶體,裝入的檔案可在進入DEBUG時指定亦可用N命令建立,格式為-n檔名:
例1 DEBUG tan.pas
-L 100
例2 DEBUG
-n tan.pas
-L 100
須知:L命令只能讀取邏輯扇區,不能讀取硬碟分割槽表
L命令中所用的磁碟程式碼A=00,B=01,C=02……