https://www.cnblogs.com/tiger2soft/p/5094917.html
R命令的使用
作用:觀看和修改寄存器的值。
在提示符“-”下輸入以下命令:R。DEBUG將會顯示出當前所有寄存器和標志位的狀態。
接下來再輸入命令rax。在提示符“:”后輸入100。該命令的作用是將寄存器ax的值設置為100(注意:DEBUG使用的是十六進制,這里的100相當於十進制的256。)
最后再執行r命令,觀看修改后的寄存器值。
H命令的使用
H命令作用:計算兩個十六進制數的和與差。
在提示符“–”下輸入以下命令:h 10 1。觀看命令執行結果。
運行結果的前一個數是計算出來的和,后一個數是計算出來的差。計算結果均用十六進制形式表示。
D命令的使用
D命令作用:顯示內存區域的內容。
在提示符“–”下連續執行命令R、D、D。觀看命令執行結果。
前面已經介紹過了,命令R的作用是顯示當前寄存器的值。而命令D的作用是顯示內存區域的內容,最左邊是內存的起始地址,中間以十六進制的形式顯示內存值,最右邊是以ASCII碼的形式顯示內存值。每行最多顯示16個字節的內容。
命令D可以帶參數也可省略參數。設DEBUG啟動時DS的值為X,當省略參數時,命令D顯示內容以X:100為起始,每次顯示128個字節的內容。以后再執行不帶參數的命令D時,DEBUG將按上次的位置接着顯示下去。
帶參數時DEBUG能夠顯示指定地址范圍的內容。帶參數的方式有三種:
方式一:d [起始位置]。DEBUG從起始位置開始顯示128個字節的內容。在提示符“-”下執行命令d 1000:100。觀看命令執行結果。
方式二:d [起始位置] [結束位置]。DEBUG從起始位置開始一直顯示到結束位置。在提示符“-”下執行命令d 1000:100 200。觀看命令執行結果。
方式三:d [起始位置] [L長度],長度以L參數為標識。DEBUG從起始位置開始顯示指定長度的內容。在提示符“-”下執行命令d ds:100 L10。觀看命令執行結果。
E命令的使用
E命令作用:改變內存單位的內容。
E命令的使用方式為:E [起始位置]。
在提示符“-”下輸入以下命令:e 1000:100。
DEBUG首先顯示[1000:100]的內容01.,這時可以修改該字節的值。如果還要修改后續的內容,可以按空格鍵繼續。當要跳過某個字節時,可以按連續的兩個空格跳到后一個字節去。
F命令的使用
F命令作用:使用指定的值填充指定內存區域中的地址。
F命令的使用方式為:F [范圍] [填充列表]。
在提示符“-”下輸入以下命令:F 1AF5:100 L20 1 2 3 4 5。執行命令D 1AF5:100觀看命令執行結果。
說明:該命令是用字節序列01、02、03、04、05輪流填充從1AF5:100開始長度為20H的內存區域。
在提示符“-”下輸入以下命令:F 1AF5:100 13F 41 42 43 44。
說明:該命令是用字節序列41、42、43、44輪流填充從1AF5:100開始一直到1AF5:13F的內存區域。
M命令的使用
M命令作用:將指定內存區域的數據復制到指定的地址去。
M命令的使用方式為:M [范圍] [指定地址]。
在提示符“-”下輸入以下命令:M 1AF5:100 13F 1AF5:140。執行命令D 1AF5:100觀看命令執行結果。
C命令的使用
C命令作用:將兩塊內存的內容進行比較。
C命令的使用方式為:C [范圍] [指定地址],意思就是將指定范圍的內存區域與從指定地址開始的相同長度的內存區域逐個字節進行比較,列出不同的內容。
在提示符“-”下輸入以下命令:C 1AF5:100 13F 1AF5:140。由於兩塊內容完全相同,所以命令執行后沒有任何顯示。
在提示符“-”下輸入以下命令:C 1AF5:100 107 1AF5:180,比較的區域長度為8個字節。命令執行后列出比較結果不同的各個字節。
S命令的使用
S命令作用:在指定的內存區域中搜索指定的串。
S命令的使用方式為:S [范圍] [指定串]。
在提示符“-”下輸入以下命令:D 1AF5:100 11F。顯示該區域的內存值。
在提示符“-”下輸入以下命令:S 1AF5:100 11F 41 42 43 44。搜索該區域是否存在字節串41 42 43 44,並將搜索結果一一列出。
從執行結果可以看出,總共搜索到八處。
A命令的使用
A命令作用:輸入匯編指令。
以下的程序要在屏幕上顯示“ABCD”四個字符。
首先用E命令將“ABCD$”四個字符預先放在內存CS:200處,然后執行A100命令輸入匯編程序代碼:
MOV AX,CS
MOV DS,AX
MOV DX,200
MOV AH,9
INT 21
INT 20
(說明:前兩行匯編指令用於將段寄存器CS的值賦給段寄存器DS。第三到第五行匯編代碼的作用是顯示以“$”為結尾的字符串。最后一行用於結束程序。)
G命令的使用
G命令作用:執行匯編指令。
G命令的使用方法是:G [=起始地址] [斷點地址],意思是從起始地址開始執行到斷點地址。如果不設置斷點,則程序一直運行到中止指令才停止。
在設置完示例九的的內存數據並且輸入完示例九的程序后運行這些匯編代碼。在DEBUG中執行命令G=100,觀看運行結果。
匯編程序運行后在屏幕上顯示出“ABCD”四個字符。
接下來在DEBUG中執行G=100 10B,意思是從地址CS:100開始,一直運行到CS:10B停止。觀看運行結果。
命令執行后,不但顯示出字符串“ABCD”,而且列出當前寄存器和標志位的值。
g命令在loop中的使用:
使用loop循環時,如果要跳出循環執行后面的代碼,可以先用u命令查看代碼的偏移地址,在用g命令跳轉到此偏移到此代碼處,如下:
用u命令可以看到循環的命令位於0b40:000b,所以要跳出循環就用 g 000b 即可。
U命令的使用
U命令作用:對機器代碼反匯編顯示。
U命令的使用方法是:U [范圍]。如果范圍參數只輸入了起始地址,則只對20H個字節的機器代碼反匯編。執行命令U100,觀看反匯編結果。
執行命令U100 10B,觀看反匯編結果。該命令的作用是對從100到10B的機器代碼進行反匯編。
N命令的使用
N命令作用:設置文件名,為將剛才編寫的匯編程序存盤做准備。
以下的DEBUG命令序列作用將剛才的匯編程序存為磁盤的COM可執行程序。
D200 20F
U100 10C
N E:\FIRST.COM
RCX
:110
W
第一和第二條命令的作用是檢查一下剛才編寫的匯編指令。第三條命令的作用是設置存盤文件名為E:\FIRST.COM,第四條命令的作用是設置存盤文件大小為110H個字節。最后一條命令是將文件存盤。
文件存盤后執行E:\FIRST.COM,觀看存盤的可執行文件的運行效果。
W命令的使用
W命令作用:將文件或者特定扇區寫入磁盤。
在示例“N命令的使用”中已經實驗了如何使用W命令將文件存盤。
在沒有很好地掌握匯編語言和磁盤文件系統前,暫時不要使用W命令寫磁盤扇區,否則很容易損壞磁盤文件,甚至破壞整個磁盤的文件系統。
L命令的使用
L命令作用:從磁盤中將文件或扇區內容讀入內存。
將文件調入內存必須先用DEBUG的N命令設定文件名。以下例子是將E:\FIRST.COM讀入內容。
N FIRST.COM
L
觀看調入程序的匯編代碼可以使用DEBUG的U命令,用U100觀看調入的COM文件。
讀取磁盤扇區的方式是:L [內存地址] [磁盤驅動器號] [起始扇區] [扇區數]。“內存地址”指定要在其中加載文件或扇區內容的內存位置,如果不指定“內存地址”的話,DEBUG將使用CS寄存器中的當前地址。“磁盤驅動器號”指定包含讀取指定扇區的磁盤的驅動器,該值是數值型:0=A,1=B,2=C等。“起始扇區”指定要加載其內容的第一個扇區的十六進制數。“扇區數”指定要加載其內容的連續扇區的十六進制數。
只有要加載特定扇區的內容而不是加載文件時,才能使用[磁盤驅動器號] [起始扇區] [扇區數]參數。
例如:要將C盤第一扇區讀取到內存DS:300的位置,相應的DEBUG命令為L DS:300 2 1 1。但是由於Windows操作系統對文件系統的保護,這條命令可能會被操作系統禁止運行。
T命令的使用
T命令作用:執行匯編程序,單步跟蹤。
T命令的使用方式是T [=地址] [指令數]。如果忽略“地址”的話,T命令從CS:IP處開始運行。“指令數”是要單步執行的指令的數量。
以下示例對E:\FIRST.COM進行單步跟蹤。
N E:\FIRST.COM
L
U100 10B
R
T=100
T
第一、二條命令是裝入文件,第三條命令是列出程序反匯編代碼,第四條命令是顯示當前寄存器值,第五條命令是從CS:100處開始單步跟蹤,第六條命令是繼續跟蹤后續的指令。
P命令的使用
P命令作用:執行匯編程序,單步跟蹤。與T命令不同的是:P命令不會跟蹤進入子程序或軟中斷。
P命令的使用方式與T命令的使用方式完全相同。
p命令還可以用於結束本次循環,進入下一次循環。
I命令的使用
I命令作用:從計算機輸入端口讀取數據並顯示。
I命令的用法是I [端口地址]。例如從3F8號端口讀取數據並顯示的命令為:I 3F8。這里不對該命令做解釋。
O命令的使用
O命令作用:向計算機輸出端口送出數據。
O命令的用法是O [端口地址] [字節值]。例如向278號端口發出數據20H的命令為:I 278 20。這里不對該命令做解釋。
Q命令的使用
Q命令的作用是退出DEBUG,回到DOS狀態。