DEBUG命令使用解析一

2021-04-30 21:59:31 字數 3990 閱讀 6819

啟動 debug,它是可用於測試和除錯 ms-dos 可執行檔案的程式。

debug [[drive:][path] filename [parameters]]

引數 [drive:][path] filename

指定要測試的可執行檔案的位置和名稱。

parameters

指定要測試的可執行檔案所需要的任何命令列資訊。

說明 使用 debug 命令但不指定要測試的檔案

如果使用沒有位置和檔名的 debug 命令,然後鍵入所有的 debug 命令以響應 debug 提示符,連字元 (-)。

debug 命令

以下是 debug 命令列表:

? 顯示 debug 命令列表。

a 彙編 8086/8087/8088 記憶碼。

c 比較記憶體的兩個部分。

d 顯示部分記憶體的內容。

e 從指定位址開始,將資料輸入到記憶體。

f 使用指定值填充一段記憶體。

g 執行在記憶體中的可執行檔案。

h 執行十六進製制運算。

i 顯示來自特定埠的 1 位元組值。

l 將檔案或磁碟扇區內容載入到記憶體。

m 複製記憶體塊中的內容

/n 為 l 或 w 命令指定檔案,或者指定正在測試的檔案的引數。

o 向輸出埠傳送 1 個位元組的值。

p 執行迴圈、重複的字串指令、軟體中斷或子例程。

q 停止 debug 會話。

r 顯示或改變乙個或多個暫存器。

s 在部分記憶體中搜尋乙個或多個位元組值的模式。

t 執行一條指令,然後顯示所有暫存器的內容、所有標誌的狀態和 debug 下一步要執行的指令的解碼形式。

u 反彙編位元組並顯示相應的原語句。

w 將被測試檔案寫入磁碟。

xa 分配擴充套件記憶體。

xd 釋放擴充套件記憶體。

xm 對映擴充套件記憶體頁。

xs 顯示擴充套件記憶體的狀態。

分隔命令引數

所有 debug 命令都接受引數,除了 q 命令之外。可以用逗號或空格分隔引數,但是只有在兩個十六進製制值之間才需要這些分隔符。因此,以下命令等價:

dcs:100 110

d cs:100 110

d,cs:100,110

指定有效位址項

debug 命令中的 address 引數指定記憶體位置。address 是乙個包含字母段記錄的二位名稱或乙個四位字段位址加上乙個偏移量。可以忽略段暫存器或段位址。a,g,l,t,u 和 w 命令的預設段是 cs。所有其他命令的預設段是 ds。所有數值均為十六進製制格式。

有效位址如下:

cs:0100

04ba:0100

在段名和偏移量之間要有冒號。

指定有效範圍項

debug 命令中的 range 引數指定了記憶體的範圍。可以為 range 選擇兩種格式:起始位址和結束位址,或者起始位址和長度範圍(由 l 表示)。

例如,下面的兩個語法都可以指定從 cs:100 開始的 16 位元組範圍:

cs:100 10f

cs:100 l 10

debug 子命令

選擇 debug 命令以獲得詳細資訊。

debug:a(彙編)

debug:c(比較)

debug**儲)

debug:e(鍵入)

debug:f(填充)

debug:g**向)

debug:h(十六進製制)

debug:i(輸入)

debug:l(載入)

debug:m(移動)

debug:n(名稱)

debug:o(輸出)

debug:p(執行)

debug:q(退出)

debug:r(暫存器)

debug:s(搜尋)

debug:t(跟蹤)

debug:u(反彙編)

debug:w(寫入)

debug:xa(分配擴充套件記憶體)

debug:xd(取消分配擴充套件記憶體)

debug:xm(對映擴充套件記憶體頁)

debug:xs(顯示擴充套件記憶體狀態)

***********************debug子命令******************************

debug:a(彙編)

直接將 8086/8087/8088 記憶碼合併到記憶體。

該命令從組合語言語句建立可執行的機器碼。所有數值都是十六進製制格式,必須按一到四個字元輸入這些數值。在引用的操作**(操作碼)前指定字首記憶碼。

a [address]

引數 address

指定鍵入組合語言指令的位置。對 address 使用十六進製制值,並鍵入不以「h」字元結尾的每個值。如果不指定位址,a 將在它上次停止處開始彙編。

有關將資料輸入到指定位元組中的資訊,請單擊「相關主題」列表中的 debug e(鍵入)。

有關反彙編位元組的資訊,請單擊「相關主題」列表中的 debug u(反彙編)。

範例 a 命令支援所有形式的間接註冊命令,如下例所示:

add bx,34[bp+2].[si-1]

pop [bp+di]

push [si] )

還支援所有操作碼同義詞,如下例所示:

loopz 100

loope 100

ja 200

jnbe 200

對於 8087 操作碼,必須指定 wait 或 fwait 字首,如下例所示:

fwait fadd st,st(3) ; this line assembles

; an fwait prefix

說明 使用記憶碼

段的替代記憶碼為 cs:、ds:、es: 和 ss:。遠端返回的記憶碼是 retf。字串處理的記憶碼必須明確宣告字串大小。例如,使用 movsw 可以移動 16 位的字串,使用 mov***(文字因故被系統遮蔽)***(文字因故被系統遮蔽) 可以移動 8 位位元組串。

彙編跳轉和呼叫

匯程式設計序根據位元組替換自動將短、近和遠的跳轉及呼叫彙編到目標位址。通過使用 near 或 far 字首可以替代這樣的跳轉或呼叫,如下例所示:

-a0100:0500

0100:0500 jmp 502 ; a 2-byte short jump

0100:0502 jmp near 505 ; a 3-byte near jump

0100:0505 jmp far 50a ; a 5-byte far jump

可以將 near 字首縮寫為 ne。

區分字和位元組記憶體位置

當某個運算元可以引用某個字記憶體位置或者位元組記憶體位置時,必須用字首 word ptr 或者字首 byte ptr 指定資料型別。可接受的縮寫分別是 wo 和 by。以下範例顯示兩種格式:

dec wo [si]

neg byte ptr [128]

指定運算元

debug 使用包括在中括號 ([ ]) 的運算元引用記憶體位址的習慣用法。這是因為另一方面 debug 不能區分立即運算元和記憶體位址的運算元。以下範例顯示兩種格式:

mov ax,21 ; load ax with 21h

mov ax,[21] ; load ax with the

; contents of

; memory location 21h

使用偽指令

使用 a 命令提供兩個常用的偽指令:db 操作碼,將位元組值直接彙編到記憶體,dw 操作碼,將字值直接彙編到記憶體。以下是兩個偽指令的範例:

db 1,2,3,4,"this is an example"

db this is a quotation mark:"

db "this is a quotation mark:"

dw 1000,2000,3000,"bach"

DEBUG命令使用解析六

debug u 反彙編 反彙編位元組並顯示相應的原語句,其中包括位址和位元組值。反彙編 看起來象已彙編檔案的列表。u range 引數 無 如果在沒有引數的情況下使用,則 u 命令分解 20h 位元組 預設值 從前面 u 命令所顯示位址後的第乙個位址開始。range 指定要反彙編 的起始位址和結束位...

Debug命令小結

本文主要介紹debug應用的一些常用例項,以備查閱。為了檢測lcd螢幕是否存在壞點,可以將整個螢幕填充為紅 綠 藍 白等純色,以便檢查 下面給出幾個常用的顯示屏檢測f命令 debug視窗一般較小,按alt enter將它放大到整個螢幕 f b800 00 f9f 20 70 全屏白色 f b800 ...

Debug命令詳解

debug命令詳解 命令列引數形式 格式 debug 驅動器號 路徑 檔名 除錯引數 用途 debug將所指定檔案裝入記憶體,顯示提示符 等待進一 步命令。若裝入檔案為.exe檔案,按照重定位原則裝入為可執行狀態 檔案類似。若為其它型別檔案則直接進行記憶體對映,由偏移量 100h原封不動讀入記憶體。...