DEBUG各命令详细说明(很详细)
DEBUG各命令詳細(xì)說明
啟動(dòng)DEBUG
1.打開Windows命令窗口
在Windows 95/98的環(huán)境中,打開命令窗口的步驟為:點(diǎn)擊“開始”→“運(yùn)行”,輸入“command”命令; 在WindowsXP及WIN7的環(huán)境中,打開命令窗口的步驟為:點(diǎn)擊“開始”→“運(yùn)行”,輸入“cmd”命令;
2.啟動(dòng)DEBUG
在命令窗口中啟動(dòng)DEBUG,啟動(dòng)命令一般為:DEBUG ?[文件名] [參數(shù)表]。其中:文件名指定被調(diào)試的文件,其包括名和后綴,參數(shù)表是被調(diào)試文件運(yùn)行時(shí)所需要的參數(shù)。被調(diào)試的文件可以是系統(tǒng)中的任何文件,但通常它們的 后綴為.EXE或.COM。 當(dāng)DEBUG啟動(dòng)成功后,將顯示連接符“-”,這時(shí),可輸入各種DEBUG命令。DEBUG中所有命令及其含義如DEBUG各命令功能說明表 所示。 關(guān)于使用命令的幾點(diǎn)說明:在提示符“-”下才能輸入命令,在按“回車”鍵后,該命令才開始執(zhí)行命令是單個(gè)字母,命令和參數(shù)的大小寫可混合輸入可用F1、 F2、F3、Ins、Del、左移鍵、右移鍵等編輯鍵來編輯本行命令當(dāng)命令出現(xiàn)語法錯(cuò)誤時(shí),將在出錯(cuò)位置顯示“^ Error”可用Ctrl+C或Ctrl+Break來終止當(dāng)前命令的執(zhí)行,還可用Ctrl+S或Ctrl+Num Lock來暫停屏幕顯示(當(dāng)連續(xù)不斷地顯示信息時(shí))
以下通過實(shí)現(xiàn)十九個(gè)示例來熟悉DEBUG的命令集和基本的匯編指令。
R命令的使用
R命令作用:觀看和修改寄存器的值。
在提示符“-”下輸入以下命令:R。DEBUG將會(huì)顯示出當(dāng)前所有寄存器和標(biāo)志位的狀態(tài)。
接下來再輸入命令RCX。在提示符“:”后輸入100。該命令的作用是將寄存器CX的值設(shè)置為100(注意:DEBUG使用的是十六進(jìn)制,這里的100相當(dāng)于十進(jìn)制的256。)
最后再執(zhí)行R命令,觀看修改后的寄存器值。
H命令的使用
H命令作用:計(jì)算兩個(gè)十六進(jìn)制數(shù)的和與差。
在提示符“–”下輸入以下命令:H?10?1。觀看命令執(zhí)行結(jié)果。
運(yùn)行結(jié)果的前一個(gè)數(shù)是計(jì)算出來的和,后一個(gè)數(shù)是計(jì)算出來的差。計(jì)算結(jié)果均用十六進(jìn)制形式表示。
D命令的使用
D命令作用:顯示內(nèi)存區(qū)域的內(nèi)容。
在提示符“–”下連續(xù)執(zhí)行命令R、D、D。觀看命令執(zhí)行結(jié)果。
前面已經(jīng)介紹過了,命令R的作用是顯示當(dāng)前寄存器的值。而命令D的作用是顯示內(nèi)存區(qū)域的內(nèi)容,最左邊是內(nèi)存的起始地址,中間以十六進(jìn)制的形式顯示內(nèi)存值,最右邊是以ASCII碼的形式顯示內(nèi)存值。每行最多顯示16個(gè)字節(jié)的內(nèi)容。
命令D可以帶參數(shù)也可省略參數(shù)。設(shè)DEBUG啟動(dòng)時(shí)DS的值為X,當(dāng)省略參數(shù)時(shí),命令D顯示內(nèi)容以X:100為起始,每次顯示128個(gè)字節(jié)的內(nèi)容。以后再執(zhí)行不帶參數(shù)的命令D時(shí),DEBUG將按上次的位置接著顯示下去。
帶參數(shù)時(shí)DEBUG能夠顯示指定地址范圍的內(nèi)容。帶參數(shù)的方式有三種:
方式一:d?[起始位置]。DEBUG從起始位置開始顯示128個(gè)字節(jié)的內(nèi)容。在提示符“-”下執(zhí)行命令D?1AF5:100。觀看命令執(zhí)行結(jié)果。
方式二:d?[起始位置]?[結(jié)束位置]。DEBUG從起始位置開始一直顯示到結(jié)束位置。在提示符“-”下執(zhí)行命令D?DS:100?1FF。觀看命令執(zhí)行結(jié)果。
方式三:d?[起始位置]?[L長度],長度以L參數(shù)為標(biāo)識(shí)。DEBUG從起始位置開始顯示指定長度的內(nèi)容。在提示符“-”下執(zhí)行命令D?DS:100?L10。觀看命令執(zhí)行結(jié)果。
E命令的使用
E命令作用:改變內(nèi)存單位的內(nèi)容。
E命令的使用方式為:E?[起始位置]。
在提示符“-”下輸入以下命令:E?1AF5:100。
DEBUG首先顯示[1AF5:0000]的內(nèi)容00.,這時(shí)可以修改該字節(jié)的值。如果還要修改后續(xù)的內(nèi)容,可以按空格鍵繼續(xù)。當(dāng)要跳過某個(gè)字節(jié)時(shí),可以按連續(xù)的兩個(gè)空格跳到后一個(gè)字節(jié)去。
F命令的使用
F命令作用:使用指定的值填充指定內(nèi)存區(qū)域中的地址。
F命令的使用方式為:F?[范圍]?[填充列表]。
在提示符“-”下輸入以下命令:F?1AF5:100?L20?1?2?3?4?5。執(zhí)行命令D?1AF5:100觀看命令執(zhí)行結(jié)果。
說明:該命令是用字節(jié)序列01、02、03、04、05輪流填充從1AF5:100開始長度為20H的內(nèi)存區(qū)域。
在提示符“-”下輸入以下命令:F?1AF5:100?13F?41?42?43?44。
說明:該命令是用字節(jié)序列41、42、43、44輪流填充從1AF5:100開始一直到1AF5:13F的內(nèi)存區(qū)域。
M命令的使用
M命令作用:將指定內(nèi)存區(qū)域的數(shù)據(jù)復(fù)制到指定的地址去。
M命令的使用方式為:M?[范圍]?[指定地址]。
在提示符“-”下輸入以下命令:M?1AF5:100?13F?1AF5:140。執(zhí)行命令D?1AF5:100觀看命令執(zhí)行結(jié)果。
C命令的使用
C命令作用:將兩塊內(nèi)存的內(nèi)容進(jìn)行比較。
C命令的使用方式為:C?[范圍]?[指定地址],意思就是將指定范圍的內(nèi)存區(qū)域與從指定地址開始的相同長度的內(nèi)存區(qū)域逐個(gè)字節(jié)進(jìn)行比較,列出不同的內(nèi)容。
在提示符“-”下輸入以下命令:C?1AF5:100?13F?1AF5:140。由于兩塊內(nèi)容完全相同,所以命令執(zhí)行后沒有任何顯示。
在提示符“-”下輸入以下命令:C?1AF5:100?107?1AF5:180,比較的區(qū)域長度為8個(gè)字節(jié)。命令執(zhí)行后列出比較結(jié)果不同的各個(gè)字節(jié)。
S命令的使用
S命令作用:在指定的內(nèi)存區(qū)域中搜索指定的串。
S命令的使用方式為:S?[范圍]?[指定串]。
在提示符“-”下輸入以下命令:D?1AF5:100?11F。顯示該區(qū)域的內(nèi)存值。
在提示符“-”下輸入以下命令:S?1AF5:100?11F?41?42?43?44。搜索該區(qū)域是否存在字節(jié)串41?42?43?44,并將搜索結(jié)果一一列出。
從執(zhí)行結(jié)果可以看出,總共搜索到八處。
A命令的使用
A命令作用:輸入?yún)R編指令。
以下的程序要在屏幕上顯示“ABCD”四個(gè)字符。
首先用E命令將“ABCD$”四個(gè)字符預(yù)先放在內(nèi)存CS:200處,然后執(zhí)行A100命令輸入?yún)R編程序代碼:
MOV?AX,CS
MOV?DS,AX
MOV?DX,200
MOV?AH,9
INT?21
INT?20
(說明:前兩行匯編指令用于將段寄存器CS的值賦給段寄存器DS。第三到第五行匯編代碼的作用是顯示以“$”為結(jié)尾的字符串。最后一行用于結(jié)束程序。
G命令的使用
G命令作用:執(zhí)行匯編指令。
G命令的使用方法是:G [=起始地址]??[斷點(diǎn)地址],意思是從起始地址開始執(zhí)行到斷點(diǎn)地址。如果不設(shè)置斷點(diǎn),則程序一直運(yùn)行到中止指令才停止。
在設(shè)置完示例九的的內(nèi)存數(shù)據(jù)并且輸入完示例九的程序后運(yùn)行這些匯編代碼。在DEBUG中執(zhí)行命令G=100,觀看運(yùn)行結(jié)果。
匯編程序運(yùn)行后在屏幕上顯示出“ABCD”四個(gè)字符。
接下來在DEBUG中執(zhí)行G=100?10B,意思是從地址CS:100開始,一直運(yùn)行到CS:10B停止。觀看運(yùn)行結(jié)果。
命令執(zhí)行后,不但顯示出字符串“ABCD”,而且列出當(dāng)前寄存器和標(biāo)志位的值。
U命令的使用
U命令作用:對(duì)機(jī)器代碼反匯編顯示。
U命令的使用方法是:U [范圍]。如果范圍參數(shù)只輸入了起始地址,則只對(duì)20H個(gè)字節(jié)的機(jī)器代碼反匯編。執(zhí)行命令U100,觀看反匯編結(jié)果。
執(zhí)行命令U100?10B,觀看反匯編結(jié)果。該命令的作用是對(duì)從100到10B的機(jī)器代碼進(jìn)行反匯編。
N命令的使用
N命令作用:設(shè)置文件名,為將剛才編寫的匯編程序存盤做準(zhǔn)備。
以下的DEBUG命令序列作用將剛才的匯編程序存為磁盤的COM可執(zhí)行程序。
D200?20F
U100?10C
N??E:\FIRST.COM
RCX
:110
W
第一和第二條命令的作用是檢查一下剛才編寫的匯編指令。第三條命令的作用是設(shè)置存盤文件名為E:\FIRST.COM,第四條命令的作用是設(shè)置存盤文件大小為110H個(gè)字節(jié)。最后一條命令是將文件存盤。
文件存盤后執(zhí)行E:\FIRST.COM,觀看存盤的可執(zhí)行文件的運(yùn)行效果。
W命令的使用
W命令作用:將文件或者特定扇區(qū)寫入磁盤。
在示例“N命令的使用”中已經(jīng)實(shí)驗(yàn)了如何使用W命令將文件存盤。
在沒有很好地掌握匯編語言和磁盤文件系統(tǒng)前,暫時(shí)不要使用W命令寫磁盤扇區(qū),否則很容易損壞磁盤文件,甚至破壞整個(gè)磁盤的文件系統(tǒng)。
L命令的使用
L命令作用:從磁盤中將文件或扇區(qū)內(nèi)容讀入內(nèi)存。
將文件調(diào)入內(nèi)存必須先用DEBUG的N命令設(shè)定文件名。以下例子是將E:\FIRST.COM讀入內(nèi)容。
N?FIRST.COM
L
觀看調(diào)入程序的匯編代碼可以使用DEBUG的U命令,用U100觀看調(diào)入的COM文件。
?
讀取磁盤扇區(qū)的方式是:L?[內(nèi)存地址]?[磁盤驅(qū)動(dòng)器號(hào)]?[起始扇區(qū)]?[扇區(qū)數(shù)]。“內(nèi)存地址”指定要在其中加載文件或扇區(qū)內(nèi)容的內(nèi)存位置,如果不指定“內(nèi)存地址”的話,DEBUG將使用CS寄存器中的當(dāng)前地址。“磁盤驅(qū)動(dòng)器號(hào)”指定包含讀取指定扇區(qū)的磁盤的驅(qū)動(dòng)器,該值是數(shù)值型:0=A,1=B,2=C等。“起始扇區(qū)”指定要加載其內(nèi)容的第一個(gè)扇區(qū)的十六進(jìn)制數(shù)。“扇區(qū)數(shù)”指定要加載其內(nèi)容的連續(xù)扇區(qū)的十六進(jìn)制數(shù)。
只有要加載特定扇區(qū)的內(nèi)容而不是加載文件時(shí),才能使用[磁盤驅(qū)動(dòng)器號(hào)]?[起始扇區(qū)]?[扇區(qū)數(shù)]參數(shù)。
例如:要將C盤第一扇區(qū)讀取到內(nèi)存DS:300的位置,相應(yīng)的DEBUG命令為L?DS:300?2?1?1。但是由于Windows操作系統(tǒng)對(duì)文件系統(tǒng)的保護(hù),這條命令可能會(huì)被操作系統(tǒng)禁止運(yùn)行。
T命令的使用
T命令作用:執(zhí)行匯編程序,單步跟蹤。
T命令的使用方式是T?[=地址]?[指令數(shù)]。如果忽略“地址”的話,T命令從CS:IP處開始運(yùn)行。“指令數(shù)”是要單步執(zhí)行的指令的數(shù)量。
以下示例對(duì)E:\FIRST.COM進(jìn)行單步跟蹤。
N?E:\FIRST.COM
L
U100?10B
R
T=100
T
第一、二條命令是裝入文件,第三條命令是列出程序反匯編代碼,第四條命令是顯示當(dāng)前寄存器值,第五條命令是從CS:100處開始單步跟蹤,第六條命令是繼續(xù)跟蹤后續(xù)的指令。
P命令的使用
P命令作用:執(zhí)行匯編程序,單步跟蹤。與T命令不同的是:P命令不會(huì)跟蹤進(jìn)入子程序或軟中斷。
P命令的使用方式與T命令的使用方式完全相同。
I命令的使用
I命令作用:從計(jì)算機(jī)輸入端口讀取數(shù)據(jù)并顯示。
I命令的用法是I?[端口地址]。例如從3F8號(hào)端口讀取數(shù)據(jù)并顯示的命令為:I?3F8。這里不對(duì)該命令做解釋。
O命令的使用
O命令作用:向計(jì)算機(jī)輸出端口送出數(shù)據(jù)。
O命令的用法是O?[端口地址]?[字節(jié)值]。例如向278號(hào)端口發(fā)出數(shù)據(jù)20H的命令為:I?278?20。這里不對(duì)該命令做解釋。
Q命令的使用
Q命令的作用是退出DEBUG,回到DOS狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的DEBUG各命令详细说明(很详细)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8086汇编贪吃蛇(随机食物+速度递增)
- 下一篇: 汇编指令CALL与JMP的区别