命令行參數(shù)形式:
格式:DEBUG [[驅(qū)動器號:][路徑]文件名 [調(diào)試參數(shù)]]
用途:debug將所指定文件裝入內(nèi)存,顯示提示符“-”等待進一步命令。若裝入文件為.exe文件,按照重定位原則裝入為可執(zhí)行狀態(tài)。.com文件類似。若為其它類型文件則直接進行內(nèi)存映射,由偏移量100H原封不動讀入內(nèi)存。
debug將在緩沖區(qū)為被調(diào)試程序建立適當?shù)腜SP(程序段前綴,Program Segment Prefix)。在PSP中的偏移量80H為命令行的末尾。而且在偏移量5CH和6CH由包含參數(shù)后面的可選參數(shù)構(gòu)成缺省的FCB(文件控制塊,F(xiàn)ile Control Block)。
進入時各寄存器初使情況:
寄存器 .com程序 .exe程序
AX 指定驅(qū)動器錯誤碼 指定驅(qū)動器錯誤碼
BX 程序空間的高地址 程序空間的高地址
CX 程序空間的低地址 程序空間的低地址
DX 0 0
SI 0 0
DI 0 0
BP 0 0
SP 0FFFFH或可利用的 不定
內(nèi)存空間上限減2
IP 100H 目標程序的的代碼
入口偏移量
CS PSP 目標程序代碼段址
DS PSP PSP
CS PSP PSP
SS PSP 目標程序堆棧段底
命令:
A: 編寫匯編代碼(Assemble)
格式:A[地址]
用途:程序允許在指定位置(若無缺省為IP指針位置)進行匯編
程序書寫。
細節(jié):
*所有數(shù)值皆為十六進制整數(shù),數(shù)值后不帶“H”
*不支持文件管理用的目錄表、宏標記、條件匯編
*跳轉(zhuǎn)指令后要直接書寫十六進制地址不支持標號
*數(shù)據(jù)類型若非默認類型,要以PTR加以指定
*字符串操作要指定類型為B或W(如lodsb和lodsw等)及長度
*用DB和DW接受數(shù)據(jù)定義,直按進行匯編
*對內(nèi)存地址加[]以與立即數(shù)區(qū)分
C: 內(nèi)存內(nèi)容比較(Compare)
格式:C 地址范圍 地址
地址范圍:做比較的第一個內(nèi)存域始未地址或始地址和長度
地址: 做比較的第二個內(nèi)存域的始地址
用途:*對內(nèi)存中兩個域的內(nèi)容加以比較,以字節(jié)為單位。對發(fā)現(xiàn)有
差別的內(nèi)容及其地址用如下形式顯示出:
地址1 始位置 未位置 地址2
*若地址范圍或地址不含段地址,默認為DS的值。
D: 顯示內(nèi)存內(nèi)容(Dump)
格式:D[地址范圍]
地址范圍:給定顯示區(qū)的始未范圍或始地址和長度。
用途:*內(nèi)存內(nèi)容顯示指令,以十六進制和ASCII碼形式顯示指定范
圍內(nèi)的內(nèi)存內(nèi)容。
*若不指定范圍,第一次按目標程序的CS:IP的位址開始顯示。
以后使用上次顯示的未地址的下一地址為開始進行顯示。
*若不指定長度,則顯示128byte的內(nèi)容。計8行。
E: 數(shù)據(jù)的輸入
格式:E 地址 數(shù)值列表
地址: 數(shù)據(jù)輸入的內(nèi)存始地址
數(shù)值列表:從始地址輸入的連續(xù)數(shù)據(jù)
用途:*向內(nèi)存區(qū)域輸入數(shù)據(jù)。數(shù)據(jù)以十六進制形式,或以ASCII碼形式
均可。覆蓋掉原有數(shù)據(jù)。
*十六進制時要用空格、逗號或制表符加以分隔。字符串則要用單
引號或雙引號括起且區(qū)分大小寫。
*若不指寫段址,則默認為DS中值。每寫完一數(shù)據(jù)地址自動增加。
*如省略數(shù)值列表,對應每一字節(jié)請求輸入。點號前為該字節(jié)原
始值,點號后請求輸入。這時若按空格,跳過這一字節(jié);按回車,
結(jié)束輸入;按減號或連字符,顯示前一字節(jié)內(nèi)容。
*出錯時內(nèi)存內(nèi)容有可能已被改變。提示后終止。
*字符串只能以數(shù)值列表的形式輸入,不能按地址提式輸入。
F: 內(nèi)存填充(Fill)
格式:F 地址范圍 數(shù)值列表
地址范圍:數(shù)據(jù)輸入的內(nèi)存始本地址或首地址和長度
數(shù)值列表:從始地址輸入的連續(xù)數(shù)據(jù)
用途:*將列表中數(shù)據(jù)寫入內(nèi)存。輸入數(shù)據(jù)以十六進制或ASCII碼形式。
覆蓋原有信息;若出錯,顯示出錯信息,原有信息保留。
*若未指寫段址,默認為DS寄存器值。
*列表中可有十六進制或字符串兩種形式,各內(nèi)容用空格、逗號、
制表符隔開。字符串必須以單引號或雙引號括起,區(qū)分大小寫。
*若要填充區(qū)域大于數(shù)據(jù)數(shù)目,列表可重復使用;相反,若列表
比要填充區(qū)域大時,則自動截斷后面的數(shù)據(jù)。
G: 程序執(zhí)行(Go)
格式:G[=地址][斷點0][……斷點]
地址: Debug開始執(zhí)行的地址。
斷點0……斷點9:指定的0—10個臨時中斷點。
用途:*將CPU控制權(quán)由Debug轉(zhuǎn)移給被調(diào)試中的程序。不設斷點時,則程
序的執(zhí)行或是中途失敗或是正常結(jié)束。結(jié)束時,提示有“Program
termminated nomally”,即程序結(jié)束正常,控制權(quán)再返回到
Debug。
*此時因數(shù)據(jù)有可能重寫,若需再次執(zhí)行,因重新裝入。
*地址中,如未指定段址,則使用目標程序的CS寄存器中的值。當
地址省略時,則Debug使用目標程序的CS:IP寄存器的值開始執(zhí)行。
且為與斷點區(qū)分,地址參數(shù)前必須加等號,否則將其認為是第零
個斷點。
*斷點參數(shù)可指定10個臨時斷點。當程序執(zhí)行到指定的斷點地址時
則發(fā)生中止。與斷點表內(nèi)的次序無關(guān),斷點可按任意次序輸入。
*中止時,將會顯示寄存器的內(nèi)容、標志位狀態(tài)及CS:IP指出的指
令(也就是下一條將要執(zhí)行的指令),然后是提示符“-”。
*若沒有裝入可執(zhí)行程序或程序內(nèi)容未知,有可能進入死狀態(tài)。
*若目標程序的棧不起作用或太小,則可能引起系統(tǒng)“破碎”。
H: 執(zhí)行十六進制算術(shù)運算(Hexadecimal)
格式:H 值1 值2
值1、2為0—FFFFH范圍內(nèi)的任意十六進制數(shù)。
用途:*用來求兩個十六進制數(shù)的和、差,對結(jié)果顯示為值1+值2及值1-
值2。如果值2 > 值1則顯示其補碼。
*雖然很少用,但事實還是很有用的,熟練掌握。
I: 端口的輸入(Input)
格式:I 端口地址
端口地址:0—FFFF范圍內(nèi)的I/O端口地址。
用途:用來讀取指定I/O端口地址,并以2位十六進制數(shù)加以顯示。
警告:I指令將直接訪問計算機硬件,不是所以錯誤檢查都能進行,所以
使用是必須小心。對某個外設控制器分配端口的輸入操作,可能
干涉系統(tǒng)固有的操作。對沒有分配指定I/O端口的設備,或該端口
為寫入專用端口等情況,I命令都不能保證可顯示。
L: 裝入命令(Load)
格式:L 地址
或
L 地址 驅(qū)動器 開始扇區(qū) 扇區(qū)數(shù)
地址: 存放從盤中讀出數(shù)據(jù)的內(nèi)存地址。
驅(qū)動器: A=0, B=1, C=2, 以此類推。
開始扇區(qū):以十六進制數(shù)表示要最先裝入的邏輯扇區(qū)號。
扇區(qū)數(shù): 以十六進制數(shù)表示要裝入連續(xù)扇區(qū)個數(shù)。
用途:*若輸入了一個不完全的L命令時,則對下述磁盤文件進行裝入:
1在Debug命令行中指定過的文件;
2由命令末尾參數(shù)N指定的文件。
*在地址中若未指定段址,則使用CS中的值。若為可執(zhí)行文件按重
定位原則裝入為可執(zhí)行狀態(tài)。
*裝入后文件長度,或.exe文件程序的實際長度放入目標程序的BX
和CX兩個寄存器中。高十六位放在BX中。
*若在命令行中給出所有參數(shù),則不必用MS-DOS的文件系統(tǒng)訪問磁
盤。
M: 數(shù)據(jù)傳送(Move)
格式:M 地址范圍 地址
地址范圍:被復制域的始末地址,或始地址和長度。
地址: 數(shù)據(jù)復制目的域的起始地址。
用途:*對內(nèi)存中數(shù)據(jù)進行復制。目的域被覆蓋。
*若地址范圍中無段址,則使用DS內(nèi)容;若地址中無段址,使用地
址范圍中的值。
N: 文件名或命令末尾的參數(shù)(Name)
格式:N 參數(shù) [參數(shù)……]
參數(shù):插入到仿真的PSP中去一個以上的文件名或者是開關(guān)項。
用途:*對磁盤讀寫操作L、W指定目標文件。
O: 端口的輸出(Output)
格式:O 端口 字節(jié)
端口:I/O端口地址。
字節(jié):寫入I/O端口的0—FFFF范圍的值。
用途:向I/O端口地址寫入一字節(jié)。
警告:錯誤的操作將導致系統(tǒng)崩潰。
P: 循環(huán)或子程序處理(Procedure)
格式:P[=地址] [命令數(shù)]
地址: 執(zhí)行的起始地址。
指令數(shù):執(zhí)行的指令條數(shù)。
用途:*循環(huán)或子程序處理。將循環(huán)、串指令、軟件中斷或子程序調(diào)用
視為單語句。執(zhí)行中了,顯示目標程序寄存器內(nèi)容、標志位狀態(tài)
和下一條要執(zhí)行的指令。
*若地址參數(shù)中無段址,則使用CS中的值。完全忽略地址時,則從
程序中的CS:IP指定位置開始執(zhí)行。
Q: 結(jié)束Debug操作(Quit)
格式:Q
用途:程序結(jié)束返回。對未保存的結(jié)果丟失。
R: 寄存器顯示與更改(Register)
格式:R [寄存器]
寄存器:AX BX CX DX SP BP SI DI
DS ES CS IP PC
F
用途:*若R不帶參數(shù),則顯示所有寄存器的內(nèi)容和狀態(tài)標志、下一指令。
*若指定新值,在顯示內(nèi)容后,給出冒句提示輸入新值。回車結(jié)束。
*對狀態(tài)字F,在連字符“-”后以空格間隔輸入新值,次序不計。
*若直接回車,則跳過修改,寄存器內(nèi)容不變。
S: 內(nèi)存檢索(Search)
格式:S 地址范圍 列表
地址范圍:想來你該明白是什么樣了吧:)
列表: 欲檢索的一個以上的字節(jié)值或字符串。
用途:*在指定的內(nèi)存范圍內(nèi)檢索列表的值。對每一個匹配的地址進行
顯示。
*若起地址中無段址,默認為DS的值。
*檢索范圍不得大于FFFFH
*列表必須以分隔符(空格,逗號,制表符等)分隔;字符串要加
單引號或雙引號括起,區(qū)分大小寫。
T: 程序執(zhí)行跟蹤(Trace)
格式:T[=地址][指令數(shù)]
地址: 執(zhí)行的第一條指令的地址。
指定數(shù):執(zhí)行的機器指令的條數(shù)。
用途:*執(zhí)行單條指令,顯示寄存器及下一條指令。
*在地址參數(shù)中若無段址,則默認為CS寄存器的值。
*若全部省略,則由CS:IP寄存器指出的地址開始執(zhí)行。
*以后則順序執(zhí)行。
*對ROM內(nèi)的跟蹤應使用T命令。
警告:對Intel 8259 中斷屏幕的內(nèi)容(IBM PC及兼容機端口20H和21H)
的更改,或者系統(tǒng)功能調(diào)用(INT 21H),不能使用T指令,對上述
情況要使用P指令。
U: 反匯編(Unassemble)
格式:U [地址范圍]
用途:*將機器指定解碼為匯編語言的助記符。
*地址范圍中無段址時,默認使用CS值。
*當始地址與實際邊界不一致時,結(jié)果將不可信。
*若不含末地址或長度,則自給定始地址起反匯編32個字節(jié)。
*以后由前次U最后一指令的下一指令做32字節(jié)的反匯編。
*若從沒用過U,則于CS:IP開始進行反匯編。
*只能對8086指令解碼,對其它以DB來顯示。
W: 寫入文件或扇區(qū)(Write)
格式:W [地址]
或
W 地址 驅(qū)動器 開始扇區(qū) 扇區(qū)數(shù)
地址: 待寫入盤的數(shù)據(jù)在內(nèi)存中的起始位置。
驅(qū)動器:寫入數(shù)據(jù)的盤的驅(qū)動器號(A=0,B=1,C=2,以下類推)。
始扇區(qū):寫入數(shù)據(jù)的最前的邏輯扇區(qū)號(0—FFFFH)。
扇區(qū)數(shù):寫入數(shù)據(jù)的連續(xù)扇區(qū)個數(shù)(0—FFFFH)。
用途:*將內(nèi)存中的文件或一個個扇區(qū)傳送到磁盤上。
*W若不帶參數(shù),或只有地址參數(shù),則按BX:CX寄存器指出的字節(jié),從內(nèi)
存向磁盤寫入數(shù)據(jù)。此時的文件名是此命令前最后一個使用過的文件名
,或者是N命令中指定的文件,如果沒有使用過N命令,則使用Debug命
令行中指定的文件。
*Debug的W命令,不能向擴展名為.EXE或.HEX的文件中寫入數(shù)據(jù)。
*這可用改擴展名的方法得到應用,讓其能對.exe文件寫入。
*若無地址項,則認為是目標程序的CS:0100H。
*該命令可不通過MS-DOS的文件系統(tǒng)直接訪問磁盤的邏輯扇區(qū)。但必須
以十六進制形式給在命令行中給定各參數(shù)。
*W命令不能對用于網(wǎng)絡上的驅(qū)動器進行邏輯扇區(qū)寫入處理。
警告:若參數(shù)有誤,則可能破壞盤文件結(jié)構(gòu)。