DEBUG主要命令(转)
1、如何調(diào)用DEBUG程序
語法格式:DEBUG [驅(qū)動器名:][路徑][文件名]
如有文件名,則將指定的文件調(diào)入內(nèi)存。
如命令中沒有指定文件名,則DEBUG可以與正在內(nèi)存中的內(nèi)容打交道。DEBUG程序調(diào)入后,出現(xiàn)提示符“_”,說明現(xiàn)在系統(tǒng)在DEBUG程序的管理下,所有DEBUG命令只有在出現(xiàn)提示符后才有效。
2、DEBUG對寄存器和標志位的初始化
?????指令指針寄存器(IP)置為0100H。
?????AX、BX、CX、DX、BP、SI、DI置為0。若DEBUG調(diào)入時指定了文件名,則BX:CX中包含以字節(jié)表示的文件長度。
?????標志清零。
3、有關(guān)DEBUG命令的一些共同信息
?????所有命令都是一個字母,后面跟一個或多個參數(shù),數(shù)據(jù)是十六進制數(shù);
?????命令和參數(shù)大、小寫等價;
?????命令和參數(shù)之間可以用定界符,兩個相鄰的十六進制數(shù)之間必須使用定界符;
?????按Ctrl+Break可以中止一個命令的執(zhí)行;
?????DEBUG可以檢查語法錯誤。
4、顯示內(nèi)存單元內(nèi)容的命令
格式:D[地址] 或 D[范圍]
功能:檢查指定范圍的存儲單元的內(nèi)容,分兩種方式顯示。
例:d 2000:0100?? d?? d100??des:0??d1000:0100 02ff
5、修改存儲單元內(nèi)容的命令
?????用命令中給定的內(nèi)容表去代替指定范圍的內(nèi)存單元的內(nèi)容。
格式:E 地址 內(nèi)容表
例:e ds:100 f3’abc’8d
??e 100 30 31 32 33 34 35 36 37
??d 100
?????逐個單元連續(xù)修改。
格式:E 地址
E2000:100
?????填寫命令
格式:F 范圍 內(nèi)容表
范圍:由起始地址和結(jié)束地址組成。
例:f ds:0 8 ‘a(chǎn)bc’
?????檢查和修改寄存器內(nèi)容的命令
格式1:R
功能:顯示所有寄存器的內(nèi)容和全部標志位的狀態(tài)。
格式2:R 寄存器名
功能:顯示和修改一個指定寄存器的內(nèi)容。
格式3:RF
功能:顯示和修改所有標志位的狀態(tài)。
6、匯編命令A
格式:A[地址]
功能:將用戶輸入的匯編語言的語句匯編成機器碼,存放在指定地址開始的存儲單元中。若沒有指定地址,則接著上一個匯編命令的最后一個單元開始存放;若前面沒有用過匯編命令,則從(CS):100H單元開始存放。
注:Debug不能確定某些操作數(shù)涉及到的是字單元還是字節(jié)單元,必須用前綴來說明數(shù)據(jù)類型。
7、跟蹤命令T
格式:T[=地址][n]
功能:從指定地址開始(若沒有指定地址則從現(xiàn)行的CS:IP處)執(zhí)行n條指令后停下來,顯示每條指令執(zhí)行完后的所有寄存器和標志位的狀態(tài)。
8.反匯編命令U
????① U [地址];從指定地址開始反匯編32個字節(jié)的機器指令;省略地址時,則接著上一個U命令的最后一個單元開始;若第一次使用U命令省略地址,則從當前CS:IP開始(通常是CS:100)。
????② U 范圍;對指定范圍的單元進行反匯編。
????-U
????-U100
????-U100L10????
9.運行程序命令G
????① G;從CS:IP指向的指令開始執(zhí)行程序,直到程序結(jié)束或遇到INT 3。
????② G=地址;從指定地址開始執(zhí)行程序,直到程序結(jié)束或遇到INT 3。
????③ G 斷點;從CS:IP指向的指令開始執(zhí)行程序,直到遇到斷點。
????④G=地址??斷點
????-G ;從CS:IP指向的指令開始執(zhí)行程序。
????-G=100 ;從指定地址開始執(zhí)行程序。????-G=100 120
更詳細的補充:
????進入后顯示’-’,CS、DS、ES、SS四個段寄存器值相等(每次進入不一定相等,取決于系統(tǒng)及內(nèi)存駐留程序的多少),除IP=0100H、SP=FFEEH,其它通用寄存器值均為0,PSW的初值為NV、UP、EI、PL、NA、PO、NC。特別要注意CS:IP代表下一條待執(zhí)行的指令的默認起始,SS:SP為棧頂?shù)刂?#xff0c;涉及串操作時DS:SI代表源串的起始地址,ES:DI代表目的串的起始地址,涉及文件操作時BX、CX代表文件長度(BX為高16位,CX為低16位),內(nèi)存變量在DEBUG中必須用其他尋址方式替代(一般用直接偏移量表示)。練習各條常用DEBUG命令的使用,要求熟悉英文縮寫及單詞。
????1、????-?????????; 顯示如下(命令英文全稱,命令,參數(shù)表)(中括號代表可省略,下同)
assemble???? A [address]
compare??????C range address
dump???????? 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
2、????顯示和修改寄存器的內(nèi)容的命令R的用法:-R[積存器名| F]
-R????????; 這可顯示所有寄存器的內(nèi)容,包括標志寄存器的內(nèi)容,以及當前CS:IP處的一條指令的機器碼和匯編指令,還有涉及到的存儲單元內(nèi)容。如:
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=119D ES=119D CS=119D IP=0100??NV??UP??EI??PL??NZ??NA??PO??NC
119D:0100 B83412?????????? MOV??AX,1234
除PSW外其余寄存器均顯示為16進制數(shù)據(jù),PSW各標志位的置位/復位(1/0)分別為:
OF: OV/NV(Overflow/No Overflow)
DF: DN/UP(Down/Up)
IF: EI/DI(Enable Interrupt/Disable Interrupt)
SF: NG/PL(Negative/Positive)
ZF: ZR/NZ(Zero/Not Zero)
AF: AC/NA(Auxiliary Carry/No Auxiliary Carry)
PF: PE/PO(Parity Even/Parity Odd)
CF: CY/NC(Carry/No Carry)
-R 寄存器名或標志F????????; 修改指定寄存器或標志位的內(nèi)容,如:
-R BX
BX 0369
:?? ; 若不修改,可按ENTER鍵,否則在冒號后輸入要修改的內(nèi)容如059F回車,則BX的內(nèi)容有0369修改為059F。
-RF
NV UP EI PL NZ NA PO??-CY ZR?????? ; 則NC改為CY,NZ改ZR(無序)
????內(nèi)存數(shù)據(jù)內(nèi)命令主要有以下三個D、E、F。
3、????顯示內(nèi)存單元的內(nèi)容命令格式:
-D[[段地址:]起始偏移 [終止偏移]]?????? ; 顯示指定范圍的內(nèi)存單元內(nèi)容,如:
-D
0BB4:0100??2E F6 06 56 91 40 74 0F-26 F7 47 02 20 00 74 07?? ...V.@t.&.G. .t.
0BB4:0110??26 80 7E 00 00 74 22 26-F7 07 10 00 34 00 A3 0B?? &.~..t"&....4...
0BB4:0120??75 09 26 80 7E 00 00 75-0D EB 0E 3C 00 75 07 26?? u.&.~..u...<.u.&
0BB4:0130??80 7E 00 3A 74 03 F9 EB-06 2E 89 36 59 91 F8 5E?? .~.:t......6Y..^
0BB4:0140??5A 5D 58 C3 50 51 52 56-53 56 E8 AA 00 5E 2E C7?? Z]X.PQRVSV...^..
0BB4:0150??06 08 92 00 00 2E C7 06-0A 92 00 00 2E C7 06 0C?? ................
0BB4:0160??92 00 00 E8 AD 00 72 18-2E A3 08 92 0A DB 74 1A?? ......r.......t.
0BB4:0170??E8 A0 00 72 6E 2E A3 0A-92 0A DB 74 0D E8 93 00?? ...rn......t....
(默認從當前段及偏移地址開始,顯示內(nèi)存單元的128個字節(jié)的內(nèi)容,每行16個字節(jié)。顯示出內(nèi)容的格式為:內(nèi)存起始段地址:偏移地址,16個字節(jié)的16進制數(shù)據(jù),對應ASCII字符)
4、????修改內(nèi)存單元的內(nèi)容: -E[段地址:]起始偏移 [修改內(nèi)容列表],如:
-E 0100 “ABCD”??或 –E 0100 41 42 43 44
????????將0100H起始偏移單元的內(nèi)容修改為41H、42H、43H、44H。
-E 100????????; 省略內(nèi)容列表,邊顯示邊修改
136C:0100??3C.41??3E.42??75.43??70.44
5、????填充內(nèi)容列表: -F[段地址:]起始偏移 終止偏移 填充內(nèi)容列表,如:
-F 0200 0300 “AB”???? ; 將偏移地址從0200H到0300H單元的內(nèi)容都填充為ABAB......AB
????
?? 內(nèi)存程序類命令主要有以下5個:A、U、T、P、G。這類指令地址斷位一定要準確,否則可能將一條指令拆開造成程序亂套。
6、????編寫/修改匯編語句: -A[[段地址:]起始偏移],如:
-A100
0BB4:0100 MOV AX,829F
0BB4:0103 MOV BX,2C78
0BB4:0106 ADD AX,BX
0BB4:0108 HLT
0BB4:0109
7、????反匯編命令: -U[[段地址:]起始偏移 [終止偏移]]????; 將指定地址范圍的機器碼反匯編成匯編指令。如:
-U100
0BB4:0100 B89F82????????MOV???? AX,829F
0BB4:0103 BB782C????????MOV???? BX,2C78
0BB4:0106 01D8??????????ADD???? AX,BX
0BB4:0108 F4????????????HLT
0BB4:0109 F747022000????TEST????WORD PTR [BX+02],0020
0BB4:010E 7407??????????JZ??????0117
0BB4:0110 26????????????ES:
0BB4:0111 807E0000??????CMP???? BYTE PTR [BP+00],00
0BB4:0115 7422??????????JZ??????0139
0BB4:0117 26????????????ES:
0BB4:0118 F7071000??????TEST????WORD PTR [BX],0010
0BB4:011C 3400??????????XOR???? AL,00
0BB4:011E A30B75????????MOV???? [750B],AX
(未指定終止偏移共顯示13行,段地址:偏移地址 機器碼 匯編指令)
8、????單步跟蹤進入命令: -T[=[段地址:]起始偏移] [指令條數(shù)]???? ; 默認為一條指令,該命令可從指定地址起執(zhí)行指定條數(shù)指令后停下來,每條指令執(zhí)行后均會顯示寄存器內(nèi)容和狀態(tài)值。如:
-R??????????; 顯示當前寄存器、標志位及當前指令
AX=0000??BX=0000??CX=0000??DX=0000??SP=FFEE??BP=0000??SI=0000??DI=0000
DS=0BB4??ES=0BB4??SS=0BB4??CS=0BB4??IP=0100?? NV UP EI PL NZ NA PO NC
0BB4:0100 B89F82????????MOV???? AX,829F
-T??????????; 執(zhí)行當前一條指令MOV AX,829F,即將829FH送AX,標志位不變
AX=829F BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0BB4??ES=0BB4??SS=0BB4??CS=0BB4??IP=0103?? NV UP EI PL NZ NA PO NC
0BB4:0103 BB782C????????MOV???? BX,2C78
-T??????????; 執(zhí)行當前一條指令MOV BX,2C78,即將2C78H送BX,標志位不變
AX=829F BX=2C78 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0BB4??ES=0BB4??SS=0BB4??CS=0BB4??IP=0106?? NV UP EI PL NZ NA PO NC
0BB4:0106 01D8??????????ADD???? AX,BX
-T????????; 執(zhí)行當前一條指令ADD AX,BX,即將AX加BX送AX,標志位相應改變
AX=AF17 BX=2C78 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0BB4??ES=0BB4??SS=0BB4??CS=0BB4??IP=0108?? NV UP EI NG NZ AC PE NC
0BB4:0108 F4????????????HLT
9、單步跟蹤跳過命令: -P[=[段地址:]起始偏移] [指令條數(shù)]???? ; 默認為一條指令,該命令可從指定地址起執(zhí)行指定條數(shù)指令后停下來,每條指令執(zhí)行后均會顯示寄存器內(nèi)容和狀態(tài)值。與上一條T命令相比最主要的不同是遇到CALL及INT指令時是否進入子程序內(nèi)部,T會進入,P不會進入,當成一條指令一次完畢。所以在調(diào)試程序時,若子程序需要調(diào)試則用T進入,否則用P跳過以節(jié)省時間。
10、連續(xù)運行命令: -G[=[段地址:]起始偏移] [偏移2 [偏移3 […]]]
???? 起始偏移規(guī)定了運行的起始偏移地址,后面的若干偏移均為斷點地址。如:
???? -G=100 108??????; 從100H處連續(xù)執(zhí)行到108H處,不包括108H處指令
???? AX=AF17 BX=2C78 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0BB4??ES=0BB4??SS=0BB4??CS=0BB4??IP=0108?? NV UP EI NG NZ AC PE NC
0BB4:0108 F4????????????HLT
以下三個命令M、C、S既可用于內(nèi)存數(shù)據(jù)處理也可用于內(nèi)存程序處理。注意:內(nèi)存中的內(nèi)容既可看成數(shù)據(jù)也可看成程序,程序是一種特殊的數(shù)據(jù)而已。程序是由指令構(gòu)成,指令包含若干個字節(jié)的數(shù)據(jù)。
11、移動內(nèi)存數(shù)據(jù)或程序: -M[段地址:]起始偏移 終止偏移 目的偏移,如:
????-C0200 021F 0300??????; 將從偏移0200H到021FH單元的內(nèi)容與0300H到031FH中共32個字節(jié)的內(nèi)存相比較,對應不同時顯示它們的地址,相同時則不顯示。
??-C200 21F 300
??0BB4:0207??1F??0E??0BB4:0307
0BB4:0208??B8??92??0BB4:0308
0BB4:0209??00??0A??0BB4:0309
0BB4:020A??38??DB??0BB4:030A
0BB4:020B??8B??75??0BB4:030B
0BB4:020C??D6??57??0BB4:030C
0BB4:020D??CD??2E??0BB4:030D
0BB4:020E??21??A1??0BB4:030E
0BB4:020F??58??08??0BB4:030F
0BB4:0210??5A??92??0BB4:0310
0BB4:0211??1F??0A??0BB4:0311
0BB4:0212??C3??E4??0BB4:0312
0BB4:0213??51??75??0BB4:0313
0BB4:0214??52??4F??0BB4:0314
0BB4:0215??33??2E??0BB4:0315
0BB4:0216??C9??F6??0BB4:0316
0BB4:0217??2E??06??0BB4:0317
0BB4:0218??8A??55??0BB4:0318
0BB4:0219??04??91??0BB4:0319
0BB4:021A??0A??01??0BB4:031A
0BB4:021B??C0??74??0BB4:031B
0BB4:021C??74??08??0BB4:031C
0BB4:021E??2E??0C??0BB4:031E
0BB4:021F??80??77??0BB4:031F
13、查找內(nèi)存數(shù)據(jù)或程序: -S[段地址:]起始偏移 終止偏移 查找內(nèi)容列表,如:
????-S200 300 "A"
0BB4:02C1????????; 從偏移0200H到0300H單元的內(nèi)容依次與”A”即41H相比較,相同則顯示它們的地址,否則不顯示。
?? 以下兩個命令L、W主要與外存打交道,可以為磁盤的扇區(qū)也可以為文件。N用于文件取名或指定。
N命令的格式為: -N[盤符][路徑]文件名
15、將磁盤扇區(qū)內(nèi)容或文件內(nèi)容裝入內(nèi)存的命令L,L命令的格式為:
-L[[段地址:]起始偏移]????????; 將N命令指定的文件內(nèi)容裝入內(nèi)存指定起始地址處,并將文件長度填充到BX、CX中,BX為長度高16位,CX為低16位,裝入文件也可由DEBUG命令時帶入?yún)?shù),如:>DEBUG 文件名。
????-L[段地址:]起始偏移 盤號 起始扇區(qū)號 扇區(qū)數(shù)??????; 將指定盤(0號對應A盤、1號對應B盤,依次類推)的指定扇區(qū)的內(nèi)容(一個扇區(qū)512字節(jié))裝入內(nèi)存。如:
????-L 100 2 0 1????????; 將硬盤C的引導扇區(qū)內(nèi)容讀入內(nèi)存100H開始處
????-D 100????????????; 顯示引導扇區(qū)內(nèi)容
????0BB4:0100??3B 52 45 53 45 54 2E 41-53 4D 20 28 52 45 53 45?? ;RESET.ASM (RESE
0BB4:0110??54 BF AA B9 D8 B8 B4 CE-BB C6 F4 B6 AF B3 CC D0?? T...............
0BB4:0120??F2 29 20 0D 0A 43 4F 44-45 31 20 53 45 47 4D 45?? .) ..CODE1 SEGME
0BB4:0130??4E 54 20 41 54 20 30 46-46 46 46 48 20 0D 0A 41?? NT AT 0FFFFH ..A
0BB4:0140??53 53 55 4D 45 20 43 53-3A 43 4F 44 45 31 20 0D?? SSUME CS:CODE1 .
0BB4:0150??0A 41 44 44 52 20 4C 41-42 45 4C 20 46 41 52 20?? .ADDR LABEL FAR
0BB4:0160??0D 0A 43 4F 44 45 31 20-45 4E 44 53 20 0D 0A 43?? ..CODE1 ENDS ..C
0BB4:0170??4F 44 45 20 53 45 47 4D-45 4E 54 20 0D 0A 4F 52?? ODE SEGMENT ..OR
-D
0BB4:0180??47 20 31 30 30 48 20 0D-0A 41 53 53 55 4D 45 20?? G 100H ..ASSUME
0BB4:0190??43 53 3A 43 4F 44 45 2C-44 53 3A 43 4F 44 45 2C?? CS:CODE,DS:CODE,
0BB4:01A0??45 53 3A 43 4F 44 45 0D-0A 53 54 41 52 54 3A 20?? ES:CODE..START:
0BB4:01B0??0D 0A 4A 4D 50 20 46 41-52 20 50 54 52 20 41 44?? ..JMP FAR PTR AD
0BB4:01C0??44 52 20 0D 0A 43 4F 44-45 20 45 4E 44 53 20 0D?? DR ..CODE ENDS .
0BB4:01D0??0A 45 4E 44 20 53 54 41-52 54 20 0D 0A 0D 0A 3B?? .END START ....;
0BB4:01E0??42 4F 4F 54 2E 41 53 4D-20 28 C8 C8 C6 F4 B6 AF?? BOOT.ASM (......
0BB4:01F0??B3 CC D0 F2 29 20 0D 0A-43 4F 44 45 31 20 53 45?? ....) ..CODE1 SE
-D
0BB4:0200??47 4D 45 4E 54 20 41 54-20 30 46 46 46 46 48 20?? GMENT AT 0FFFFH
0BB4:0210??0D 0A 41 53 53 55 4D 45-20 43 53 3A 43 4F 44 45?? ..ASSUME CS:CODE
0BB4:0220??31 20 0D 0A 41 44 44 52-20 4C 41 42 45 4C 20 46?? 1 ..ADDR LABEL F
0BB4:0230??41 52 20 0D 0A 43 4F 44-45 31 20 45 4E 44 53 20?? AR ..CODE1 ENDS
0BB4:0240??0D 0A 43 4F 44 45 20 53-45 47 4D 45 4E 54 20 0D?? ..CODE SEGMENT .
0BB4:0250??0A 4F 52 47 20 31 30 30-48 20 0D 0A 41 53 53 55?? .ORG 100H ..ASSU
0BB4:0260??4D 45 20 43 53 3A 43 4F-44 45 2C 44 53 3A 43 4F?? ME CS:CODE,DS:CO
0BB4:0270??44 45 2C 45 53 3A 43 4F-44 45 0D 0A 53 54 41 52?? DE,ES:CODE..STAR
-D
0BB4:0280??54 3A 20 0D 0A 4D 4F 56-20 41 58 2C 30 30 34 30?? T: ..MOV AX,0040
0BB4:0290??48 20 0D 0A 4D 4F 56 20-44 53 2C 41 58 20 0D 0A?? H ..MOV DS,AX ..
0BB4:02A0??4D 4F 56 20 41 58 2C 31-32 33 34 48 20 0D 0A 4D?? MOV AX,1234H ..M
0BB4:02B0??4F 56 20 53 49 2C 30 30-37 32 48 20 0D 0A 4D 4F?? OV SI,0072H ..MO
0BB4:02C0??56 20 5B 53 49 5D 2C 41-58 20 0D 0A 4A 4D 50 20?? V [SI],AX ..JMP
0BB4:02D0??46 41 52 20 50 54 52 20-41 44 44 52 20 0D 0A 43?? FAR PTR ADDR ..C
0BB4:02E0??4F 44 45 20 45 4E 44 53-20 0D 0A 45 4E 44 20 53?? ODE ENDS ..END S
0BB4:02F0??54 41 52 54 0D 0A 0D 0A-2E 8B 36 E3 91 E9 CE F7?? TART......6.....
16、將內(nèi)存中內(nèi)容存入磁盤扇區(qū)或文件中去的命令W,W命令的格式為:
????-W[[段地址:]起始偏移]???????? ; 將內(nèi)存指定起始地址處的內(nèi)容(長度由BX、CX指定,BX為長度高16位,CX為長度低16位)存入由N命令指定的文件或DEBUG命令時裝入的文件中去。如:
????C:\DOCUME~1\ADMINI~1>DEBUG E:\BOOT.DAT
-R BX
BX 0000???????????? ; 指定文件長度高16位為0
:0
-R CX?????????????? ; 指定文件長度低16位為512(200H)
CX 0000
:200
-W 100??????????????; 文件存盤
Writing 00200 bytes
-W[段地址:]起始偏移 盤號 起始扇區(qū)號 扇區(qū)數(shù)???????? ; 將指定內(nèi)存起始處的內(nèi)容存入指定盤的指定扇區(qū)中。如果遇到C盤引導區(qū)被破壞,此時可用軟盤啟動后,裝入剛才備份的引導區(qū)文件覆蓋到原引導區(qū)即可:
C:\DOCUME~1\ADMINI~1>DEBUG E:\BOOT.DAT
-L 100
-W 100 2 0 1??????????; 將硬盤C的引導扇區(qū)內(nèi)容讀入內(nèi)存100H開始處
注:32位以上機型不支持此功能
17、十六進制計算H命令格式為: -H 十六進制數(shù)1 十六進制數(shù)2,如:
-H 1234 5678
68AC??BBBC??????????; 求出兩數(shù)之和、之差
18、端口輸入命令I(lǐng)的格式為: -I 端口地址,從指定端口輸入一個字節(jié)內(nèi)容,如:
-I 40
B2
19、端口輸出命令O的格式為: -O 端口地址 輸出字節(jié)內(nèi)容,將字節(jié)內(nèi)容輸出到端口,如破解CMOS口令:
????-O 70 10
20、退出命令: -Q
轉(zhuǎn)載于:https://www.cnblogs.com/suiyingjie/archive/2007/06/30/801370.html
總結(jié)
以上是生活随笔為你收集整理的DEBUG主要命令(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《商务与经济统计》练习:案例8-1:杂志
- 下一篇: 1D機身調焦方法