導航:首頁 > 程序命令 > Debug程序的命令

Debug程序的命令

發布時間:2022-06-17 10:46:48

❶ 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命令的命令介紹

它的功能包括以下幾個方面。
⒈ 直接輸入,更改,跟蹤,運行匯編語言源程序;
⒉ 觀察操作系統的內容;3.查看ROM BIOS的內容;
⒋觀察更改RAM內部的設置值;
⒌以扇區或文件的方式讀寫軟盤數據
DEBUG把所有數據都作為位元組序列處理。因此它可以讀任何類型的文件。DEBUG可以識別兩種數據: 十六進制數據和ASCⅡ碼字元。它的顯示格式是各個位元組的十六進制值以及值在32與126之間的位元組的相應ASCⅡ碼字元。
在DEBUG中輸入數據有兩種方法: 提示方法和非提示方法。在用提示方法時,用戶可以輸入要求輸入數據的命令,後跟數據所要輸入的地址。然後用戶就可以看到該地址中已有內容及一個冒號提示符。此時用戶可以在提示符下輸入一個新的值或者按下回車鍵或CTRL+C回到短橫(-)提示符。在運用非提示方法時,用戶可以輸入要輸入數據的內存地址以及要輸入的位元組。但與使用字處理程序或正文編輯程序時不一樣,在使用DEBUG時,用戶不能直接移動游標到一入口點輸入或修改數據,而要一次輸入一個或幾個位元組。
在使用DEBUG時可以只涉及內存中的數據,從而一般都要指定所要處理的內存地址,地址的輸入格式是: [段地址]: [位移]。如果沒有輸入地址,DEBUG將假定為當前內存段,從位於地址100H的位元組開始。前100H位元組保留給程序段前綴使用,這一專用區域用於建立DOS與程序之間的聯系。DEBUG總是用四位十六進制數表示地址。用兩位數表示十六進制數據。
講到這里大家應該對DEBUG有了初步的了解,但是光知道這些可不夠,接下來我來講講DEBUG的命令格式和命令。當輸入
DEBUG
調用了DEBUG程序,就會出現一個短橫提示符,用戶就可以在這一短橫後輸入DEBUG程序的命令。有些DEBUG命令會顯示一個內存地址並產生一個作為提示符的冒號。在這些提示符後,用戶可以輸入一個新值以改變所顯示位置原來的值。如果用戶不輸入一個新值而是按下回車或CTRL+C,那麼原來的值不會改變。
一般用不著把地址和命令名字分開。例如,用轉儲命令D察看100號地址的數據,那麼這個命令可以用以下任一種形式輸入:
D100
D,100
D 100
如果輸入的命令中出現了錯誤,DEBUG將在下一行對著錯誤的位置標記出來,例如:
-s100 d 12
^Error

❸ debug命令有什麼作用如何使用

DEBUG是為匯編語言設計的一種高度工具,它通過單步、設置斷點等方式為匯編語言程序員提供了非常有效的調試手段。
一、DEBUG程序的調用
在DOS的提示符下,可鍵入命令:
C:\DEBUG [D:][PATH][FILENAME[.EXT]][PARM1][PARM2]
其中,文件名是被調試文件的名字。如用戶鍵入文件,則DEBUG將指定的文件裝入存儲器中,用戶可對其進行調試。如果未鍵入文件名,則用戶可以用當前存儲器的內容工作,或者用DEBUG命令N和L把需要的文件裝入存儲器後再進行調試。命令中的D指定驅動器PATH為路徑,PARM1和PARM2則為運行被調試文件時所需要的命令參數。
在DEBUG程序調入後,將出現提示符,此時就可用DEBUG命令來調試程序。
二、DEBUG的主要命令
1、顯示存儲單元的命令D(DUMP),格式為:
_D[address]或_D[range]
例如,按指定范圍顯示存儲單元內容的方法為:
-d100 120
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.
7
18E4:0120 8B
其中0100至0120是DEBUG顯示的單元內容,左邊用十六進製表示每個位元組,右邊用ASCII字元表示每個位元組,·表示不可顯示的字元。這里沒有指定段地址,D命令自動顯示DS段的內容。如果只指定首地址,則顯示從首地址開始的80個位元組的內容。如果完全沒有指定地址,則顯示上一個D命令顯示的最後一個單元後的內容。
2、修改存儲單元內容的命令有兩種。
·輸入命令E(ENTER),有兩種格式如下:第一種格式可以用給定的內容表來替代指定范圍的存儲單元內容。命令格式為:
-E address[list]
例如,-E DS:100 F3'XYZ'8D
其中F3,'X','Y','Z'和各佔一個位元組,該命令可以用這五個位元組來替代存儲單元DS:0100到0104的原先的內容。
第二種格式則是採用逐個單元相繼修改的方法。命令格式為:
-E address
例如,-E DS:100
則可能顯示為:
18E4:0100 89.-
如果需要把該單元的內容修改為78,則用戶可以直接鍵入78,再按「空格」鍵可接著顯示下一個單元的內容,如下:
18E4:0100 89.78 1B.-
這樣,用戶可以不斷修改相繼單元的內容,直到用ENTER鍵結束該命令為止。
·填寫命令F(FILL),其格式為:
-F range list
例如:-F 4BA:0100 5 F3'XYZ'8D
使04BA:0100~0104單元包含指定的五個位元組的內容。如果list中的位元組數超過指定的范圍,則忽略超過的項;如果list的位元組數小於指定的范圍,則重復使用list填入,直到填滿指定的所有單元為止。
3)檢查和修改寄存器內容的命令R(register),它有三種格式如下:
·顯示CPU內所有寄存器內容和標志位狀態,其格式為:
-R
例如,-r
AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC
18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000
·顯示和修改某個寄存器內容,其格式為:
-R register name
例如,鍵入
-R AX
系統將響應如下:
AX F1F4

即AX寄存器的當前內容為F1F4,如不修改則按ENTER鍵,否則,可鍵入欲修改的內容,如:

-R bx
BX 0369
:059F
則把BX寄存器的內容修改為059F。
·顯示和修改標志位狀態,命令格式為:
-RF系統將響應,如:
OV DN EI NG ZR AC PE CY-
此時,如不修改其內容可按ENTER鍵,否則,可鍵入欲修改的內容,如:
OV DN EI NG ZR AC PE CY-PONZDINV
即可,可見鍵入的順序可以是任意的。
4)運行命令G,其格式為:
-G[=address1][address2[address3…]]
其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。後面的地址均為斷點地址,當指令執行到斷點時,就停止執行並顯示當前所有寄存器及標志位的內容,和下一條將要執行的指令。
5)跟蹤命令T(Trace),有兩種格式:
·逐條指令跟蹤
-T [=address]
從指定地址起執行一條指令後停下來,顯示所有寄存器內容及標志位的值。如未指定地址則從當前的CS:IP開始執行。
·多條指令跟蹤
-T [=address][value]
從指定地址起執行n條指令後停下來,n由value指定。
6)匯編命令A(Assemble),其格式為:
-A[address]
該命令允許鍵入匯編語言語句,並能把它們匯編成機器代碼,相繼地存放在從指定地址開始的存儲區中。必須注意:DEBUG把鍵入的數字均看成十六進制數,所以如要鍵入十進制數,則其後應加以說明,如100D。
7)反匯編命令U(Unassemble)有兩種格式。
·從指定地址開始,反匯編32個位元組,其格式為:
-U[address]
例如:
-u100
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
18E4:0112 BBO4O2 MOV BX,0204
18E4:0115 E80200 CALL 011A
18E4:0118 CD20 INT 20
18E4:011A 50 PUSH AX
18E4:011B 51 PUSH CX
18E4:011C 56 PUSH SI
18E4:011D 57 PUSH DI
18E4:011E 8B37 MOV SI,[BX]
如果地址被省略,則從上一個U命令的最後一條指令的下一個單元開始顯示32個位元組。
·對指定范圍內的存儲單元進行反匯編,格式為:
-U[range]
例如:
-u100 10c
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202

-u100 112
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202

可見這兩種格式是等效的。
8)命名命令N(Name),其格式為:
-N filespecs [filespecs]
命令把兩個文件標識符格式化在CS:5CH和CS:6CH的兩個文件控制塊中,以便在其後用L或W命令把文件裝入存檔。filespecs的格式可以是:
[d:][path] filename[.ext]
例如,
-N myprog
-L
-
可把文件myprog裝入存儲器。
9)裝入命令(Load),有兩種功能。
·把磁碟上指定扇區范圍的內容裝入到存儲器從指定地址開始的區域中。其格式為:
-L[address[drive sector sector]
·裝入指定文件,其格式為:
-L[address]
此命令裝入已在CS:5CH中格式化了文件控制塊所指定的文件。如未指定地址,則裝入CS:0100開始的存儲區中。
10)寫命令W(Write),有兩種功能。
·把數據寫入磁碟的指定扇區。其格式為:
-W address drive sector sector
·把數據寫入指定的文件中。其格式為:
-W[address]
此命令把指定的存儲區中的數據寫入由CS:5CH處的文件控制塊所指定的文件中。如未指定地址則數據從CS:0100開始。要寫入文件的位元組數應先放入BX和CX中。
11)退出DEBUG命令Q(Quit),其格式為:
-Q
它退出DEBUG,返回DOS。本命令並無存檔功能,如需存檔應先使用W命令。

❹ Debug是什麼命令

debug是dos中的一個外部命令,從dos 1.0起就帶有此命令,因此可見此命令的重要性了。雖然此命令的功能非常強大,可以解決許多問題,可是對許多人來說,尤其是初學者來說,卻非常不易掌握。因此,現將debug的命令詳細介紹一番,以讓大家知道它的使用。 debug:a(匯編) 直接將 8086/8087/8088 記憶碼合並到內存。 該命令從匯編語言語句創建可執行的機器碼。所有數值都是十六進制格式,必須按一到四個字元輸入這些數值。在引用的操作代碼(操作碼)前指定前綴記憶碼。 a [address] 參數 address 指定鍵入匯編語言指令的位置。對 address 使用十六進制值,並鍵入不以「h」字元結尾的每個值。如果不指定地址,a 將在它上次停止處開始匯編。 有關將數據輸入到指定位元組中的信息,請單擊「相關主題」列表中的 debug e(鍵入)。 有關反匯編位元組的信息,請單擊「相關主題」列表中的 debug u(反匯編)。 說明 使用記憶碼 段的替代記憶碼為 cs:、ds:、es: 和 ss:。遠程返回的記憶碼是 retf。字元串處理的記憶碼必須明確聲明字元串大小。例如,使用 movsw 可以移動 16 位的字串,使用 movsb 可以移動 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" 範例 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 debug:c(比較) 比較內存的兩個部分。 c range address 參數 range 指定要比較的內存第一個區域的起始和結束地址,或起始地址和長度。有關有效的 range 值的信息,請單擊「相關主題」列表中的「debug 說明」。 address 指定要比較的第二個內存區域的起始地址。有關有效 address 值的信息,請單擊「相關主題」列表中的「debug 說明」。 說明 如果range 和 address 內存區域相同,debug 將不顯示任何內容而直接返回到 debug 提示符。如果有差異,debug 按如下格式顯示: address1 byte1 byte2 addess2

❺ 請問各位命令debug是什麼意思

Debug
英文詞,程序查錯的意思。bug原意是小蟲,例如跳蚤,虱子,蒼蠅等,Debug就是找小蟲,消滅它。
Debug有很多方法。
自己手工查錯,例如加入許多列印語句,進行執行線路跟蹤,找到出錯地點,假設輸入變數值的范圍變化,看哪裡溢出。也叫Debug。
VC++里有VC++的Debug,執行線路跟蹤,變數變化跟蹤,內存變化跟蹤。在Visual
Studio控制下,Build->Start
Debug下有各種查錯方法可用。
DOS里有Debug,
在DOS窗打命令Debug啟動Debug,拍入問號,你可以得到詳細的Debug用法:
Runs
Debug,
a
program
testing
and
editing
tool.
DEBUG
[[drive:][path]filename
[testfile-parameters]]
[drive:][path]filename
Specifies
the
file
you
want
to
test.
testfile-parameters
Specifies
command-line
information
required
by
the
file
you
want
to
test.
assemble
A
[address]
compare
C
range
address
mp
D
[range]
enter
E
address
[list]
fill
F
range
list
go
G
[=address]
[addresses]
hex
H
value1
value2
input
I
port
load
L
[address]
[drive]
[firstsector]
[number]
move
M
range
address
name
N
[pathname]
[arglist]
output
O
port
byte
proceed
P
[=address]
[number]
quit
Q
register
R
[register]
search
S
range
list
trace
T
[=address]
[value]
unassemble
U
[range]
write
W
[address]
[drive]
[firstsector]
[number]
allocate
expanded
memory
XA
[#pages]
deallocate
expanded
memory
XD
[handle]
map
expanded
memory
pages
XM
[Lpage]
[Ppage]
[handle]
display
expanded
memory
status
XS
不同機種有不同的debug.
「詳細的解釋」要看是那個Debug軟體,自己查書或Debug自帶的幫助文件或說明。

❻ 誰能說出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都有哪些命令啊

DOS命令之DEBUG命令詳解
關鍵詞: DEBUG命令

DEBUG是DOS中的一個外部命令,從DOS 1.0起就帶有此命令,因此可見此命令的重要性了。雖然此命令的功能非常強大,可以解決許多問題,可是對許多人來說,尤其是初學者來說,卻非常不易掌握。因此,現將DEBUG的命令詳細介紹一番,以讓大家知道它的使用。

Debug:A(匯編)

直接將 8086/8087/8088 記憶碼合並到內存。

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

a [address]

參數

address

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

有關將數據輸入到指定位元組中的信息,請單擊「相關主題」列表中的 Debug E(鍵入)。

有關反匯編位元組的信息,請單擊「相關主題」列表中的 Debug U(反匯編)。

說明

使用記憶碼

段的替代記憶碼為 cs:、ds:、es: 和 ss:。遠程返回的記憶碼是 retf。字元串處理的記憶碼必須明確聲明字元串大小。例如,使用 movsw 可以移動 16 位的字串,使用 movsb 可以移動 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"

範例

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

Debug:C(比較)

比較內存的兩個部分。

c range address

參數

range

指定要比較的內存第一個區域的起始和結束地址,或起始地址和長度。有關有效的 range 值的信息,請單擊「相關主題」列表中的「Debug 說明」。

address

指定要比較的第二個內存區域的起始地址。有關有效 address 值的信息,請單擊「相關主題」列表中的「Debug 說明」。

說明

如果 range 和 address 內存區域相同,Debug 將不顯示任何內容而直接返回到 Debug 提示符。如果有差異,Debug 將按如下格式顯示:
address1 byte1 byte2 addess2

範例

以下命令具有相同效果:

c100,10f 300
c100l10 300

每個命令都對 100h 到 10Fh 的內存數據塊與 300h 到 30Fh 的內存數據塊進行比較。

Debug 響應前面的命令並顯示如下信息(假定 DS = 197F):

197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F

注意列表中缺少地址 197F:0106 和 197F:0306。這表明那些地址中的值是相同的。

Debug:D(轉儲)

顯示一定范圍內存地址的內容。

d [range]

參數

range

指定要顯示其內容的內存區域的起始和結束地址,或起始地址和長度。有關有效的 range 值的信息,請單擊「相關主題」列表中的「Debug 說明」。如果不指定 range,Debug 程序將從以前 d 命令中所指定的地址范圍的末尾開始顯示 128 個位元組的內容。

有關顯示寄存器內容的信息,請單擊「相關主題」列表中的 Debug R(寄存器)。

說明
當使用 d 命令時,Debug 以兩個部分顯示內存內容:十六進制部分(每個位元組的值都用十六進制格式表示)和 ASCII 碼部分(每個位元組的值都用 ASCII 碼字元表示)。每個非列印字元在顯示的 ASCII 部分由句號 (.) 表示。每個顯示行顯示 16 位元組的內容,第 8 位元組和第 9 位元組之間有一個連字元。每個顯示行從 16 位元組的邊界上開始。

範例
假定鍵入以下命令:
dcs:100 10f
Debug 按以下格式顯示範圍中的內容:
04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER......
如果在沒有參數的情況下鍵入 d 命令,Debug 按以前範例中所描述的內容來編排顯示格式。顯示的每行以比前一行的地址大 16 個位元組(如果是顯示 40 列的屏幕,則為 8 個位元組)的地址開頭。
對於後面鍵入的每個不帶參數的 d 命令,Debug 將緊接在最後顯示的命令後立即顯示位元組內容。
如果鍵入以下命令,Debug 將從 CS:100 開始顯示 20h 個位元組的內容:
dcs:100 l 20
如果鍵入以下命令,Debug 將顯示範圍從 CS 段的 100h 到 115h 中所有位元組的內容:
dcs:100 115

Debug:E(鍵入)

將數據輸入到內存中指定的地址。
可以按十六進制或 ASCII 格式鍵入數據。以前存儲在指定位置的任何數據全部丟失。

e address [list]

參數
address
指定輸入數據的第一個內存位置。
list
指定要輸入到內存的連續位元組中的數據。
有關集成記憶碼的信息,請單擊「相關主題」列表中的 Debug A(匯編)。
有關顯示內存部分內容的信息,請單擊「相關主題」列表中的 Debug D (轉儲)。

說明

使用 address 參數

如果在沒有指定可選的 list 參數的值情況下指定 address 的值,Debug 將顯示地址和內容,在下一行重復地址,並等待您的輸入。此時,您可以執行下列操作之一:

替換位元組值。為此,請在當前值後鍵入新值。如果您鍵入的值不是有效的十六進制值,或該值包含兩個以上的數字,則 Debug 不會回顯無效或額外的字元。
進入下一個位元組。為此,請按 SPACEBAR(空格鍵)。要更改該位元組中的值,請在當前值後鍵入新值。如果按 SPACEBAR(空格鍵)時,移動超過了 8 位界限,Debug 程序將顯示新的一行並在行首顯示新地址。
返回到前一個位元組。為此,請按 HYPHEN 鍵 (-)。可以反復按 HYPHEN 鍵 (-) 向後移動超過多個位元組。在按 HYPHEN 時,Debug 開始新行並顯示當前地址和位元組值。
停止執行 e 命令。為此,請按 ENTER 鍵。在任何位元組位置都可以按 ENTER。
使用 list 參數

如果指定 list 參數的值,隨後的 e 命令將使用列表中的值替換現有的位元組值。如果發生錯誤,將不更改任何位元組值。

List 值可以是十六進制位元組或字元串。使用空格、逗號或製表符來分隔值。必須將字元串包括在單或雙引號中。

範例

假定鍵入以下命令:

ecs:100

Debug 按下面的格式顯示第一個位元組的內容:

04BA:0100 EB.

要將該值更改為 41,請在插入點鍵入 41,如下所示:

04BA:0100 EB.41_

可以用一個 e 命令鍵入連續的位元組值。在鍵入新值後按 SPACEBAR(空格鍵),而不是按 ENTER 鍵。Debug 顯示下一個值。在此範例中,如果按三次 SPACEBAR(空格鍵),Debug 將顯示下面的值:

04BA:0100 EB.41 10. 00. BC._

要將十六進制值 BC 更改為 42,請在插入點鍵入 42,如下所示:

04BA:0100 EB.41 10. 00. BC.42_

假定決定值 10 應該是 6F。要糾正該值,請按 HYPHEN 鍵兩次以返回到地址 0101(值 10)。Debug 顯示以下內容:

04BA:0100 EB.41 10. 00. BC.42-
04BA:0102 00.-
04BA:0101 10._

在插入點鍵入 6f 更改值,如下所示:

04BA:0101 10.6f_

按 ENTER 停止 e 命令並返回到 Debug 提示符下。

以下是字元串項的範例:

eds:100 "This is the text example"

該字元串將從 DS:100 開始填充 24 個位元組

Debug:F(填充)

使用指定的值填充指定內存區域中的地址。

可以指定十六進制或 ASCII 格式表示的數據。任何以前存儲在指定位置的數據將會丟失。

f range list

參數

range

指定要填充內存區域的起始和結束地址,或起始地址和長度。關於有效的 range 值的信息,請單擊「相關主題」列表中的「Debug 說明」。

list

指定要輸入的數據。List 可以由十六進制數或引號包括起來的字元串組成。

說明

使用 range 參數

如果 range 包含的位元組數比 list 中的數值大,Debug 將在 list 中反復指派值,直到 range 中的所有位元組全部填充。

如果在 range 中的任何內存損壞或不存在,Debug 將顯示錯誤消息並停止 f 命令。

使用 list 參數

如果 list 包含的數值多於 range 中的位元組數,Debug 將忽略 list 中額外的值。

範例

假定鍵入以下命令:

f04ba:100l100 42 45 52 54 41

作為響應,Debug 使用指定的值填充從 04BA:100 到 04BA:1FF 的內存位置。Debug 重復這五個值直到 100h 個位元組全部填滿為止。

Debug:G(轉向)

運行當前在內存中的程序。

g [=address] [breakpoints]

參數

=address

指定當前在內存中要開始執行的程序地址。如果不指定 address,Windows 2000 將從 CS:IP 寄存器中的當前地址開始執行程序。

breakpoints

指定可以設置為 g 命令的部分的 1 到 10 個臨時斷點。

有關執行循環、重復的字元串指令、軟體中斷或子程序的信息,請單擊「相關主題」列表中的 Debug P(執行)。

有關執行指令的信息,請單擊「相關主題」列表中的 Debug T(跟蹤)。

Debug:H(十六進制)

對指定的兩個參數執行十六進制運算。

h value1 value2

參數

value1

代表從 0 到 FFFFh 范圍內的任何十六進制數字。

value2

代表從 0 到 FFFFh 范圍內第二個十六進制數字。

說明

Debug 首先將指定的兩個參數相加,然後從第一個參數中減去第二個參數。這些計算的結果顯示在一行中:先計算和,然後計算差。

範例

假定鍵入以下命令:

h19f 10a

Debug 執行運算並顯示以下結果。
02A9 0095

Debug:I(輸入)

從指定的埠讀取並顯示一個位元組值。

i port

參數

port

按地址指定輸入埠。地址可以是 16 位的值。

有關將位元組值發送到輸出埠的信息,請單擊「相關主題」列表中的 Debug O(輸出)。

範例

假定鍵入以下命令:

i2f8

同時假定埠的位元組值是 42h。Debug 讀取該位元組,並將其值顯示如下:
42

Debug:L(載入)

將某個文件或特定磁碟扇區的內容載入到內存。

要從磁碟文件載入 BX:CX 寄存器中指定的位元組數內容,請使用以下語法:

l [address]

要略過 Windows 2000 文件系統並直接載入特定的扇區,請使用以下語法:

l address drive start number

參數

address

指定要在其中載入文件或扇區內容的內存位置。如果不指定 address,Debug 將使用 CS 寄存器中的當前地址。

drive

指定包含讀取指定扇區的磁碟的驅動器。該值是數值型:0 = A, 1 = B, 2 = C 等。

start

指定要載入其內容的第一個扇區的十六進制數。

number

指定要載入其內容的連續扇區的十六進制數。只有要載入特定扇區的內容而不是載入 debug 命令行或最近的 Debug n(名稱)命令中指定的文件時,才能使用 drive、start 和 number 參數。

有關指定用於 l 命令的文件的信息,請單擊「相關主題」列表中的 Debug n(名稱)。

有關寫入調試到磁碟的文件的信息,請單擊「相關主題」列表中的 Debug w(寫入)。

注意

使用不帶參數的 l 命令

當使用不帶參數的 l 命令時,在 debug 命令行上指定的文件將載入到內存中,從地址 CS:100 開始。Debug 同時將 BX 和 CX 寄存器設置為載入的位元組數。如果不在 debug 命令行指定文件,所裝入的文件將是最近使用 n 命令經常指定的文件。

使用具有 address 參數的 1 命令

如果使用帶 address 參數的 l 命令,Debug 將從內存位置 address 開始載入文件或指定扇區的內容。

使用帶全部參數的 l 命令

如果使用帶所有參數的 l 命令,Debug 將載入指定磁碟扇區的內容而不是載入文件。

載入特定扇區的內容

指定范圍內的每個扇區均從 drive 讀取。Debug 從 start 開始載入,直到在 number 中指定的扇區數中的內容全部被載入。

載入 .exe 文件

Debug 忽略 .exe 文件的地址 address 參數。如果指定 .exe 文件,Debug 將文件重新定位到 .exe 文件的標題中指定的載入地址。在 .exe 文件被載入到內存前,標題自身從 .exe 文件脫離,因此磁碟上的 .exe 文件大小與內存中的不同。如果要檢查整個 .exe 文件,請使用不同的擴展名重命名文件。

打開十六進制文件

Debug 將具有 .hex 擴展名的文件認為十六進制格式文件。鍵入不帶參數的 l 命令,可以載入從十六進制文件中指定的地址處開始的十六進制文件。如果鍵入的 l 命令包含 address 參數,Debug 將把指定的地址加到在十六進制文件中找到的地址上,以確定起始地址。

範例

假定啟動 Debug 並鍵入以下命令:

nfile.com

現在可以鍵入 l 命令以載入 File.com。Debug 將載入文件並顯示 Debug 提示符。

假定需要從驅動器 C 將起始邏輯扇區為 15 (0Fh) 的 109 (6Dh) 個扇區的內容載入到起始地址為 04BA:0100 的內存中。為此,請鍵入以下命令:
l04ba:100 2 0f 6d

Debug:M(移動)

將一個內存塊中的內容復制到另一個內存塊中。

m range address

參數

range

指定要復制內容的內存區域的起始和結束地址,或起始地址和長度。

address

指定要將 range 內容復制到該位置的起始地址。

說明

復制操作對現有數據的影響

如果新數據沒有寫入正在被復制的數據塊中的地址,則源數據將保持不變。但是,如果目標塊已經包含數據(就象它在覆蓋副本操作中一樣),則將改寫該數據。(覆蓋復制操作是指那些目標數據塊部分內容覆蓋原數據塊部分內容的操作。)

執行覆蓋復制操作

m 命令執行目標地址的覆蓋復制操作,而不丟失數據。將改寫的地址內容首先復制。因此,如果將較高位地址的數據復制到較低位地址,則復制操作從原塊的最低位地址開始並向最高位地址進行。反之,如果要將數據從低地址復制到高地址,復制操作從原塊的最高地址開始,向最低地址進行。

範例

假定鍵入以下命令:

mcs:100 110 cs:500
Debug 首先將 CS:110 地址中的內容復制到地址 CS:510 中,然後將 CS:10F 地址中的內容復制到 CS:50F 中,如此操作直至將 CS:100 地址中的內容復制到地址 CS:500 中。要查看結果,請使用 Debug d(轉儲)命令,並使用 m 命令指定目標地址

Debug:N(名稱)

指定 Debug l(載入)或 w(寫入)命令的可執行文件的名稱,或者指定正在調試的可執行文件的參數。

n [drive:][path] filename

要指定測試的可執行文件的參數,請使用以下語法:

n file-parameters

參數

如果在沒有參數的情況下使用,則 n 命令清除當前規范。
[drive:][path] filename

指定要測試的可執行文件的位置和名稱。

file-parameters

為正在測試的可執行文件指定參數和開關。

有關將文件或指定磁碟扇區的內容載入到內存中的信息,請單擊「相關主題」列表中的 Debug L(載入)。

有關寫入調試到磁碟的文件的信息,請單擊「相關主題」列表中的 Debug W(寫入)。

說明

n 命令的兩個用途

可以按兩種方式使用 n 命令。首先,您可以使用它以指定後面的 l(載入)或 w(寫入)命令所使用的文件。如果在沒有命名所調試文件的情況下啟動 Debug,必須在使用 l 命令載入文件之前使用命令 nfilename。在 CS:5C 為文件控制塊 (FCB) 正確編排文件名的格式。其次,可以使用 n 命令指定被調試文件的命令行參數和開關。

❽ debug命令有哪些

DEBUG

DOS中的Debug:[

是為DOS提供的有力的偵錯,跟蹤程序運行,檢查系統數據的工具程序,它是在字元界面下以單字元命令方式工作。要很好地使用它必須具備一定的匯編程序設計和硬體基本知識的能力,當然,它為匯編語言程序員提供了有效的調試手段,它的功能包括以下幾個方面。�

1. 直接輸入、更改、跟蹤、運行匯鎇栽闖絛潁華

2. 觀察操作系統的內容;�

3. 查看ROM BIOS的內容;�

4. 觀察更改RAM內部的設置值;�

5. 以扇區或文件的方式讀寫軟盤數據。�

在DEBUG中地址用段地址與段內地址來表示,而段地址可以明確地指出來,也可以用一個段指示器(段寄存器)來代表,用段寄存器表示時,其段地址就是此寄存器的內含值:�

如:用段地址和段內地址表示FOFF:0100�

用段寄存器和段內地址表示CSF:0100←CS指向F000�

下面列出了常用命令用法。

-A 地址 從指定地址開始編寫小匯編程序,按兩個回車鍵結束編輯

-U 地址 從指定地址開始反匯編32位元組的機器指令,預設地址則從上一U命令繼續

-D 始址 終址 以16進制/Asc字元對照方式顯示指定內存范圍的數據,每行顯示10H個位元組

-E 地址 值表 用給出的值表(空格分隔)替換指定地址開始的內存單元,例:-E 100 'v' 1F 'hello'

-N 文件名 為後續的L/W命令約定所操作的文件名

-L 地址 將N命令所指定文件的內容讀入到指定內存位置。另,邏輯卷扇區直接讀:-L 地址 邏卷號 起始邏扇號 扇數

-W 地址 將BX-CX個位元組的內存數據寫入N命令指定的文件中。另,邏輯卷扇區直接寫:-W 地址 邏卷號 起始邏扇號 扇數

-R 寄存器名 顯示並允許修改指定寄存器的值

-G=始址 終址 執行指定內存中的機器指令程序

-T=地址 單步執行機器指令,預設地址則從上一T命令繼續。另,繼續跟蹤m條指令:-T m

讀取c:卷的引導扇區,並保存到Boot.1文件中,並簡單分析引導程序的前面幾條指令:

-L 1000 2 0 1

-N boot.1

-R bx ;輸入0000

-R cx ;輸入0200

-W 1000

-U 1000

讀取第一個硬碟上的主引導扇區,並保存到MB.1文件中,在屏幕上顯示硬碟分區表數據:

-A 100

yyyy:0100 mov dx,0080

yyyy:01xx mov cx,0001

yyyy:01xx mov ax,yyyy

yyyy:01xx mov es,ax

yyyy:01xx mov bx,1000

yyyy:01xx mov ax,0201

yyyy:01xx int 13

yyyy:01zz nop

-G=yyyy:0100 01zz

-N mb.1

-R bx ;輸入0000

-R cx ;輸入0200

-W 1000

-D 11be 11ff

Debugger

"Debugger"這個詞按它的英文字面意思來講是這樣一種「裝置」(-er),這種裝置可以「消除」(De-)「系統中的缺陷」(bug)。然而事實上,迄今為止我們經常使用到的"Debugger"只是用來幫助我們進行Debug的工具,"Debugger"本身不能自動完成"Debug"。我們可以回想一下我們是如何進行Debug的,在進行Debug的過程中,我們通過Debugger來完成以下工作:

(1)監視「Debug對象」的狀態;

(2)控制「Debug對象」的運行;

這些工作可以為「發現Debug對象中存在的問題」以及「對解決問題方案的檢驗」提供有用的信息。

監控工作有時只需要由軟體就可以完成,有時不僅需要軟體支持,還需要硬體的支持。

Debugger除了被用來Debug,還被用來幫助我們理解「Debug的對象」內部結構,因為我們用到的Debugger能夠完成對「Debug對象」的監控工作,在監控的過程中可以獲取「Debug對象」動態特徵的信息,這對我們理解其結構是非常有用的。

❾ DEBUG命令誰知道多少

debug命令 DEBUG命令參數詳解
DEBUG是一個DOS實用程序,是供程序員使用的程序調試工具,可以用它檢查內存中任何地方的位元組以及修改任何地方的位元組。它可以用於逐指令執行某個程序以驗證程序運行的正確性,也可以追蹤執行過程、比較一個指令執行前後的值以及比較與移動內存中數據的范圍,讀寫文件與磁碟扇區。
它的功能包括以下幾個方面。
1,直接輸入,更改,跟蹤,運行匯編語言源程序;
2,觀察操作系統的內容;
3,查看ROM BIOS的內容;
4,觀察更改RAM內部的設置值;
5,以扇區或文件的方式讀寫軟盤數據
DEBUG把所有數據都作為位元組序列處理。因此它可以讀任何類型的文件。DEBUG可以識別兩種數據: 十六進制數據和ASCⅡ碼字元。它的顯示格式是各個位元組的十六進制值以及值在32與126之間的位元組的相應ASCⅡ碼字元。
在DEBUG中輸入數據有兩種方法: 提示方法和非提示方法。在用提示方法時,用戶可以輸入要求輸入數據的命令,後跟數據所要輸入的地址。然後用戶就可以看到該地之中已有內容及一個冒號提示符。此時用戶可以在提示符下輸入一個新的值或者按下回車鍵或CTRL+C回到短橫(-)提示符。在運用非提示方法時,用戶可以輸入要輸入數據的內存地址以及要輸入的位元組。但與使用字處理程序或正文編輯程序時不一樣,在使用DEBUG時,用戶不能直接移動游標到一入口點輸入或修改數據,而要一次輸入一個或幾個位元組。
在使用DEBUG時可以只涉及內存中的數據,從而一般都要指定所要處理的內存地址,地址的輸入格式是: [段地址]: [位移]。如果沒有輸入地址,DEBUG將假定為當前內存段,從位於地址100H的位元組開始。前100H位元組保留給程序段前綴使用,這一專用區域用於建立DOS與程序之間的聯系。DEBUG總是用四位十六進制數表示地址。用兩位數表示十六進制數據。
講到這里大家應該對DEBUG有了初步的了解,但是光知道這些可不夠,接下來我來講講DEBUG的命令格式和命令。當輸入
DEBUG
調用了DEBUG程序,就會出現一個短橫提示符,用戶就可以在這一短橫後輸入DEBUG程序的命令。有些DEBUG命令會顯示一個內存地址並產生一個作為提示符的冒號。在這些提示符後,用戶可以輸入一個新值以改變所顯示位置原來的值。如果用戶不輸入一個新值而是按下回車或CTRL+C,那麼原來的值不會改變。
一般用不著把地址和命令名字分開。例如,用轉儲命令D察看100號地址的數據,那麼這個命令可以用以下任一種形勢輸入:
D100
D 100
D。100
D,100
如果輸入的命令中出現了錯誤,DEBUG將在下一行對著錯誤的位置標記出來,例如:
-s100 d 12
^Error
DEBUG的命令及功能如下:
* 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[起始地址][目的地址] 轉儲命令
功能: 以內存映象方式顯示內存中的信息。
說明: 轉儲用左右兩部分顯示內存映象內容,左邊以十六進制,右邊以ASCII字元顯示,所有不可列印字元用句號(。)表示。每行顯示16個位元組的內容,在第八和第九個位元組之間有一個連字元 - 此命令隱含的段地址為DS的值。若未指定起始地址,則D命令從顯示的最後一個單元的下一個單元開始顯示,若以前沒有使用給D命令, 則從初使化的段寄存器的內容,加上地址偏移量 0100H 開始顯示。
例:-d10,4f即為顯示DS:4f的內容在D命令中如不指出段地址,則其默認為DS段。
如指明段地址,則從指明的段地址列出指定的范圍
如:-dfff:00:0f
我們也可以指定長度來列出所需要內存內容
如:-d 100 L20即為顯示由DS:100-DS:11F的內容,共20H個位元組:
* E[地址] [位元組串) 修改內存命令
功能: 從指定的地址開始修改內存值。
格式:E起始地址[數據行]
(1)用給定內容代替指定范圍的單元內容
-E地址 內容表
例:-E100 41 42 43 44 48 47 46 45
-D 100,L08
08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE…
(2)逐個內存內容
例:-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)格式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)格式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……
* M[地址范圍][起始地址] 數據傳送命令
功能: 把地址范圍內的存儲器單元的內容移到起始地址的指定地址中
說明: 傳送期間,源區和目標區可以部分重疊;傳送後源區域數據保持不變。
例:-e100 41 42 43 44 45
-d100 10f
08F1:0100 41 42 43 44 45 62 62 63 64 -61 62 63 64 61 62 63 64 ABCDEBCDABCDABCD
-M 100 104 110
-d110 L1F
08F1:0100 41 42 43 45 0A 21 19-20 01 01 20 07 96 87 9F ABCDE……
* N[盤號: ] [路徑] [文件名] [擴展名]
功能: 定義操作文件名。
說明: 可同時定義兩個操作文件,並將形成的文件控制塊相應的設置在內存 CS:5C和CS:6C上,供以後的L和W命令操作之用。我們在運行程序偵錯時,在啟動DEBUG時在其後加文件程序名以及該程序的參數或運行文件,但當我們偵錯一段後,可能裝入其它文件來測試,這時我們可利用N命令來設置而無需退出DEBUG。
例:A:\>DEBUG tan.exe
-n youg.pas
當程序偵錯一段時間後,若要把tan.exe裝入tan1.pas則-ntanl.pas
* O[埠地址][數據] 輸出命令
功能: 發送位元組到指定的輸出埠。
例:當我們遇到開機要求輸入口令時,可用如下方式取消
-O 70 10
_O 71 00
* P[=地址] [數據] 進程命令
功能: 將一個子程序調用指令,循環指令,中斷指令或一個重復字元串指令,停止在下一條指令上。
說明: 在執行一條子程序調用指令,循環指令,中斷指令或一個重復字元串指令時,發出P命令去執行有關指令,並且返回到要執行的下一條指令。 P命令和T一樣選用來跟蹤程序運行過程用的命令,我們可以在P命令中指定程序運行的起始地址,指令個數,如未指定則CS:IP所指定程序的地址開始一次運行一條令。
P與T命令的差別在於P命令把CALL/INT當成一條指令來執行,簡化了跟蹤過程,P命令只運行RAM內存的命令,而T命令則可運行RAM和ROM里的程序。
* Q 退出命令。
* R[寄存器] 寄存器命令
功能: 一,顯示單個寄存器的內容,並提供修改功能。 二,顯示所有寄存器內容, 再加上字母標志位狀態以及要執行的下一條指令。 三,顯示8個標志位狀態, 並提供修改功能。若不想改變則回車即可。
例:-r bx
bx 0050
:51
-r
AX=0000 BX=0051 CX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0003 ES=0CD3 SS=0CD3 IP=0100 NV UP EI PL NZ NA OP NC
0CD3:0100 0F DB OF
若想改變標志寄存器,用-RF回車,則DEBUG會將標志內容顯示出來,若想改變任一標志,只要輸入該標志的名稱即可。
標志名稱 設置 未設置 標志名稱 設置 未設置
滋出 OV(未溢出) NV(未溢出) 零位 ZR NZ(不等於零)
方向 DN(減少) UP(增加) 輔助進位 AC NA(無進位)
中斷 EI(許可) DI(禁止) 奇偶標志 PE(偶) PO(奇)
符號 NG(負) PL(正) 進位 CY NC(清除進位)
例:-Rf
NV UP EI PL NZ NA PO NC :-OV DI← 輸入值
* S[地址范圍] [字元串]
功能: 在指定的地址范圍內查找給定的字元串。
說明: 用來指定在地址范圍內查找一個字元串,若找到則顯示其地址, 否則直接顯示DEBUG提示符。隱含地址為DS段值。
在此內存可以用(起始地址)(終止地址)或(起始地址)L(長度)的方式來表示,而字元串與數據行則可混合使用:如:02.76"BC"。
例:-d100 lof
08F1:0100 OF 2A 41 43 0B 31 42 96 -FF F0 B9 8A F3 00 B1.. AC,1B...
-S 100 lof"AC"
08F1:0102← 表示找到,由0102開始,
* T[=地址][指令條數] 跟蹤命令
功能: 逐條跟蹤程序的執行,每條指令執行後都將顯示各寄存器的內容。
說明: 通常採用跟蹤一條指令,但用戶也可以用指令條數設定一次跟蹤多條指令, 每執行一條指令之後,顯示所有寄存器的內容和標志狀態。
逐條指令跟蹤 -T[=起始地址]
從指定地址起執行一條指令後停下來,顯示所有寄存器內容及標志位的值,如來指定地址則從當前CS:IP開始執行。
A:\>DEBUG
-A
08F1:0100 MOV DL,03H
08F1:0102 MOV AH,02H
08F1:0104 INT 21H
08F1:0106 INT 20H
08F1:0108
-T
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=08F1 ES=08F1 SS=08F1 CS=08F1 1P=0105 NV UP EI PL NZ PO CY
09F1:0102 B402 MOV AH,02
若指定起始地址,則T命令會從指定的地址開始跟蹤,我們還可以指定跟蹤一次所運行指令的個數,用Ctrl+S暫停屏幕的顯示,以便觀察。
-t=100 10;由CS:100開始跟蹤10條指令
* U[起始地址]或者[地址范圍]
功能: 將內存中的內容轉換為匯編語句。
說明: 反匯編的位元組數取決與用戶的系統顯示形式,以及在U命令中使用的可選項。
(1)從指定地址開始編譯,反匯編32個位元組
-U[地址]←從CS:100開始,其反匯編32個位元組
如果地址被省略,則從一個U命令的最後一條指令的下一條單元開始匯編32個位元組。
(2)對指定的存貯范圍進行反匯編
-u起始地址 終止地址(L 長度)
例:-U 100 109
08F1:0100 CD20 INT 20
08F1:0102 FF9F009A CALL FA12[BX+9A00]
08F1:0106 F0 LOCK
08F1:0107 FE1D CALL FAR [DI]
08F1:0109 F0 LOCK
說明:如指定了范圍則整個范圍全都會被反編譯
* W[地址] [盤符:] [起始扇區] [扇區數] 寫盤命令
功能: 將修改過的數據寫到磁碟上。
說明: 可以將指定內存地址開始的數據寫在磁碟上,可以在沒有指定參數, 或指定地址參數的情況下,將調試文件寫在磁碟上。
在運行W時需設置文件的大小CX或BX寄存器
(1)把數據寫入磁碟的指定扇區
-W 起始地址 驅動器名 起始扇區 扇區數
(2)把數據寫入指定文件中
-W 起始地址
例A:\>DEBUG
-A
08f1:0100....
. 寫入程序段
08F1: 012A....
-R CX
CX:0000
:2A←寫入位元組數,即為程序結尾地址減起始地址
-n tan.com←設置文件名,需後綴為com
-w
Wring 002A bytes
-q
A:\>TAN←即可執行此程序
* "XD"命令:釋放EMS內存
例:-XD 0001
handle 0001 deallocatel←釋放了
利用XD釋放後可再分配
*"XM"命令;把擴充內存上的內存頁區映射到主內存區
格式:XM RAM 長頁碼 主內存頁碼句柄
例:-XM3 2 0001←把0001號句柄的第3號邏輯頁區映射到2號真實頁區
Logical page 03 mapped to physical page 02
*"XS"命令:顯示當前EMS使用情況。
格式 -XS
實用debug命令集錦
1.非物理0磁軌壞軟盤的修復
此種損壞從軟盤盤面上來看並沒有明顯的劃傷和霉變。一般可以恢復其數據,也可是軟盤重新在利用。
處理方法如下:
ⅰ. 進入debug
ⅱ. 取一張引導區沒有損壞的好磁碟,插入軟碟機
-l 100 0 0 1
ⅲ. 插入損壞的磁碟到軟碟機
-w 100 0 0 1
-q
注意:好盤與壞盤容量必須相同
2. 物理0磁軌壞軟盤中的數據讀取
對於0磁軌損壞的磁碟,一般來說是應該拋棄了,當你也不妨試一試已下方法:
磁化處理:用較強的磁鐵在靠近壞磁碟的表面處反復移動,切不可碰到磁碟介質,以免劃傷表面,然後在試試格式化。
軟盤換面:小心的將磁碟打開,堅磁片與金屬晶元分開,方面後再按原來的方法粘在一起即可,在重新格式化。
diskfix:對於diskfix想必大家都用的比較多了,裡面的磁碟修復功能很好用的。能修復大多數磁碟表面錯誤。

閱讀全文

與Debug程序的命令相關的資料

熱點內容
程序員貓 瀏覽:449
java命令編譯java文件 瀏覽:158
python函數換行 瀏覽:667
常州淘寶客app免費源碼 瀏覽:658
十代雅閣車機能連什麼app 瀏覽:989
微信朋友圈怎麼發pdf文件 瀏覽:133
win7安裝命令提示符 瀏覽:114
雙晶元機和單片機的區別 瀏覽:884
對函數的理解python 瀏覽:770
id驗證連接伺服器錯誤怎麼辦 瀏覽:281
華為怎麼換安卓 瀏覽:539
最低成本解壓方式 瀏覽:688
單片機指示燈接線 瀏覽:472
新能源壓縮機怎麼啟動測試 瀏覽:309
別人的網站源碼怎麼弄 瀏覽:726
華三的配置命令 瀏覽:332
門禁卡加密了怎麼解封 瀏覽:344
小說微盤壓縮包 瀏覽:152
pert演算法 瀏覽:749
馬三有什麼app 瀏覽:788