[網絡整理]DEBUG命令使用解析一

啓動 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"
++
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章