DEBUG命令詳解

2021-08-08 17:57:35 字數 5166 閱讀 7074

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(比較) ff

比較記憶體的兩個部分。

c range address

引數 range

指定要比較的記憶體第乙個區域的起始和結束位址,或起始位址和長度。

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 程式將從以前 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"

DEBUG命令詳解

a命令 功能 將指令直接彙編成機器碼輸入到記憶體中。引數說明 位址 指定存放鍵入組合語言指令的記憶體單元的位置。c命令 格式 c 源位址範圍 目的位址 功能 比較兩記憶體區域中的內容是否相同。若不同則按位元組顯示其位址和內容,若相同則不顯示任何內容。引數說明 源位址範圍 指定要比較的記憶體第乙個區域...

AT命令詳解

at命令解釋 1 常用操作 1.1 at 命令解釋 檢測module與串列埠是否連通,能否接收at命令 命令格式 at 命令返回 ok 與串列埠通訊正常 無返回,與串列埠通訊未連通 測試結果 at ok 1.2 at csq 命令解釋 檢查網路訊號強度和sim卡情況 命令格式 at csq 命令返回...

route命令詳解

在windows下手動設定路由主要在dos系統中命令符下 在執行輸入欄中鍵入 mand或者cmd即可 進行。鍵入命令route回車會出現大約幾十行英文說明,主要解說在windows系統中如何新增 刪除 修改路由。現簡單介紹如下 route命令格式如下 route f p mand destinati...