當前位置:編程學習大全網 - 源碼下載 - masm5.0 debug使用

masm5.0 debug使用

DEBUG 是專門為匯編語言設計的壹種調試工具軟件,可用來檢查、修改寄存器和內存單元

的內容,裝入運行程序,匯編及反匯編機器語言程序,可用單步、斷點及連續的方式執行程

序。

DEBUG 啟動方式:

>DEBUG 文件名.EXE(Enter) ; 回車進入DEBUG狀態

- ; "-" 是 DEBUG 提示符

以下是 DEBUG 的基本操作命令

壹. A (匯編) 命令

用途: 把計算機的宏匯編語句直接匯編到內存中。

格試: A [address]

說明: A 是壹條逐行匯編命令,當使用 A 命令時,並不直接將 16 進制字節,機器碼

而鍵入是助記符,但鍵入的匯編語言被匯編在指定地址的連續單元中。

在A命令後沒指出地址,分兩種情況。

沒指定地址同時前面沒有使用匯編命令,則語句被匯編到 CS:100 開始的區域中

沒指定地點,但前面已有匯編命令,則語句被匯編到緊接著前壹條匯編語句的後壹個地址單

元裏。

例:-A

1298:0200 PUSH DS

1298:0201 MOV AX,0000

1298:0204 PUSH AX

1298:0205 MOV AX,128F

1298:0208 MOV DS,AX

1298:020A MOV AX,F000

1298:020D MOV ES,AX 1298:020F MOV SI,FFFE

1298:0212 ES:

1298:0213 MOV AL,[SI]

1298:0215 CMP AL,FC

1298:0217 JNZ 0223

1298:0219 LEA DX,[006B]

1298:021D CALL 024B

二. C(比較)命令

用途: 比較兩個內存的內容。

格式: C range address

說明: 比較兩個內存的內容,比較長度由 range 決定,若發現不等的字節,按下列格式顯示

它們的內容。

例:-D 100

33E2:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

33E2:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

-D 200

33E2:0200 74 68 65 20 6B 69 6E 64-20 6F 66 20 6D 69 63 72

33E2:0210 6F 20 63 6F 6D 70 6E 74-65 72 20 69 73 20 41 54

-C 0100 L08 0200 ;比較100H和200H開始的八個字符。

33E2:0100 00 74 33E2:0200 ;顯示不同的字符。

33E2:0101 00 68 33E2:0201

33E2:0102 00 65 33E2:0202

33E2:0103 00 20 33E2:0203

33E2:0104 00 6B 33E2:0204

33E2:0105 00 69 33E2:0205

33E2:0106 00 6E 33E2:0206

33E2:0107 00 64 33E2:0207 三. D(顯示)命令

用途: 顯示部分存儲區的內容。

格式: D [range]或 D [address]

說明: 顯示指定內存單元的內容。

⑴ 在輸入的起始地址中,只鍵入壹個相對偏移量,段地址為 DS 中。

例:-D

1298:0200 1E B8 00 00 50 B8 8F 12-8E D8 B8 00 F0 8E C0 BE

1298:0210 FE FF 26 8A 04 3C FC 75-0A 8D 16 6B 00 E8 2B 00

1298:0220 EB 28 90 3C FD 75 0A 8D-16 46 00 E8 1D 00 EB 1A

⑵ 若要顯示指定範圍的內容,則要輸入顯示的圃橡始和結束地址。

例:-D 0200 027F

125F:0200 00 42 34 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

⑶ 如果沒有指定地址,則從上壹次的 D 命令最後壹個單元開始顯示。

四. E(修改)命令

用途: 修改RAM區單元的內容。

格式: E address[List]

說明: 該命令可以在指定的地址裏修改壹個或多個字節的內容,同時也可連續的修改每個字

節的內容。

⑴ 連續修改每個字節的內容。

例:-E 0200

125F:0200 00.12 00.13 00.14 00.15 00.16

⑵ 用給定的內容去代替指定範圍的內存單元內容。

例:-E 0200 'the kind of micro compnter is AT'

-D 200

33E2:0200 74 68 65 20 6B 69 6E 64-20 6F 66 20 6D 69 63 72 the kind of micr 33E2:0210 6F 20 63 6F 6D 70 6E 74-65 72 20 69 73 20 41 54 o compnter is AT

⑶ 輸入壹個連接號"-",則顯示前壹個地址單元的內容。

例:-E 0200

125F:0200 12.- ;200單元不修改,鍵入"-"。

125F:01FF 13.AC- ;AC代替13。

-D 01FE 0200

125F:01FF AC 12

五. F(填充)命令

用途: 把表中的值,填到內存單元中。

格式: F range List

說明: 如果 List 所含的字節數比 range 小,則 List 被重復使用,

如 List 所含的字節數比 range 大,則 List 多余被略去。

例:-D 0200 0210

33E2:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

33E2:0210 00

-F 0200 L0a'abcdefghij'

-D 0200 0210

33E2:0200 61 62 63 64 65 66 67 68-69 6A 00 00 00 00 00 00 abcdefghij

33E2:0210 00

六. G(執行)命令

用途: 執行需運行的程序,並對調試的程序進行斷點測試跟蹤。

格式: G[=address][address[address..]

說明: 程序從當前指令開始執行,執行的地址由 CS 和 IP 的內容決定。如用"=address"

參數取代,則程序從 CS:"=address" 開始執行。

-G ;從IP=0200開始執行,結果顯示在屏幕上。

the kind of micro compnter is AT Program terminated normally

-G 0252 ;程序從0200H單元開始執行,在0252H處設置壹個斷點。

AX=0000 BX=0000 CX=04E2 DX=0000 SP=0200 BP=0000 SI=0000 DI=0000

DS= 125F ES=125F SS=126F CS=1298 IP=0200 NV UP EI PL NZ NA PO NC

1298:0252 CB RETF

-

* 註意:壹旦程序運行結束( DEBUG 顯示"program terminated normally"信息),

⑴ 再次執行,必須重新啟動程序。

⑵ 地址參數指向的位置必須含有合法的 8086/8088 指令碼。

⑶ 堆棧指標器必須是合法的。

⑷ 對斷點只鍵入壹個偏移量,G 命令設該斷在CS寄存器中。

七. H(16進制運算)命令

用途: 對兩個十六進制數進行加、減,然後顯示出和與差。

格式: H Value Value

例:- H A B

0015 FFFF ;和為15H ,差為 FFFFH

-H 12 30

0042 FFE2 ;和為42H ,差為 FFE2H

八. M(傳送)命令

用途: 把由 range 規定的內存單元區域的內容傳送到 address 開始的單元。

格式: M range address

說明: 傳送期間總是執行復蓋傳送,源區域的數據保持不變。

-Dcs:0000 000f

1298:0000 1E B8 00 00 50 B8 8F 12-8E D8 B8 00 F0 8E C0 BE

-Dds:0000 0010

125F:0000 CD 20 00 A0 00 9A F0 FE-1D F0 F4 02 94 0E 2F 03 -Mcs:0000 l10 ds:0000

-Dds:0000 000f

125F:0000 1E B8 00 00 50 B8 8F 12-8E D8 B8 00 F0 8E C0 BE

-q

九. N(命名)命令

用途: 給文件定名,用於文件存盤或裝入內存區。

格式: N filespec[filespec...]

-N A.COM ;給文件命名為A,擴展名為COM。

-L ;把A.COM文件裝入內存。

-U ;用反匯編檢查裝入內存的程序正確否。

1298:0200 1E PUSH DS

1298:0201 B80000 MOV AX,0000

1298:0204 50 PUSH AX

1298:0205 B88F12 MOV AX,128F

1298:0208 8ED8 MOV DS,AX

1298:020A B800F0 MOV AX,F000

1298:020D 8EC0 MOV ES,AX

1298:020F BEFEFF MOV SI,FFFE

1298:0212 26 ES:

1298:0213 8A04 MOV AL,[SI]

1298:0215 3CFC CMP AL,FC

1298:0217 750A JNZ 0223

1298:0219 8D166B00 LEA DX,[006B]

1298:021D E82B00 CALL 024B

十. Q(退出)命令

用途: 退出 DEBUG狀態。 格式: Q

說明: Q命令不保留正在內存中運行的文件,若保留需用 "W" 命令, DEBUG返回

到命令處理程序,然後顯示出正常的命令提示。

-Q

> ;回到DOS下

十壹. R(寄存器)命令

用途:顯示和修改各寄存器的內容。

格式:R[Register name]

說明:當 R 命令後面不帶任何參數時,顯示出 13 個 16 位寄存器的內容,同時又顯示

出標誌寄存器各位狀態,最後顯示出下壹條要執行的指令內容。

當R命令後面帶參數時,顯示出該寄存器的內容,同時又可進行修改。

例:-R

AX=0000 BX=0000 CX=04E2 DX=0000 SP=0200 BP=0000 SI=0000 DI=0000

DS=125F ES=125F SS=126F CS=1298 IP=0200 NV UP EI PL NZ NA PO NC

1298:0200 1E PUSH DS

-R AX ;顯示AX寄存器的內容。

AX 0000

:0200 ;用0200取代0000,AX的當前值。

-RAX

-AX 0200

:

-R F

NV UP EI PL NZ NA PO NC - OV EI ZR ;修改NVEI,NZ標誌位。

標誌寄存器***有九個標誌位,其中追蹤標誌 T 不能改變,其它八個標誌位可以顯示和修改,

並且以二個字母的帶碼來分別表示各位狀態。

十二. S(檢索)命令

用途: 在指定的 Range 範圍內找到 List 規定的字符。 格式: S range List

說明: 顯示出符合規定字符處的地址,如顯示提示符 "-",則表示沒有發現規定字符。

-D 0200 0220

33E2:0200 61 62 63 64 65 66 67 68-69 6A 00 00 00 00 00 00

33E2:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

33E2:0220 00

-S 02 0220 60 ;在0200H單元,到0220H單元內,查詢60H字符。

- ;沒有檢索到,出現"-"。

-D 0200 0220

125F:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0220 00

-S 0200 0205 00 ;查詢為00H的字符。

125F:0200

125F:0201

125F:0202

125F:0203

125F:0204

125F:0205 ;顯示出查詢到為00H的字符。

十三. T(跟蹤)命令

用途: 執行以 CS:IP 中指定開始的壹個或幾個指令,並顯示出執行每條指令後所有寄存器的

內容。

格式: T[=address][Value]

說明: T 命令可以單條跟蹤執行每壹條指令,也可以由命令中Value訣定執行幾條指令,每執

行壹條指令,IP 就自動指向下壹條指令的地址。為了改變程序的起始地址,可以修改 IP 的

內容,使程序不按正常順序執行。

-T

AX=0000 BX=0000 CX=04E2 DX=0000 SP=01FE BP=0000 SI=0000 DI=0000 DS=125F ES=125F SS=126F CS=1298 IP=0201 NV UP EI PL NZ NA PO NC

1298:0201 B80000 MOV AX,0000

-T 2 ;連續執行兩條指令。

AX=0000 BX=0000 CX=04E2 DX=0000 SP=01FE BP=0000 SI=0000 DI=0000

DS=125F ES=125F SS=126F CS=1298 IP=0201 NV UP EI PL NZ NA PO NC

1298:0201 B80000 MOV AX,0000

AX=0000 BX=0000 CX=04E2 DX=0000 SP=01FE BP=0000 SI=0000 DI=0000

DS=125F ES=125F SS=126F CS=1298 IP=0204 NV UP EI PL NZ NA PO NC

1298:0204 50 PUSH AX

十四. U(反匯編)命令

用途: 將內存某壹區的計器碼(目標碼),用此命令反匯編為源程序。

格式: U [address]、(U range)

說明: U [address]命令從反匯編規定地址的指令開始,如未規定地址,

則以上壹個 U 命令的最後壹條指令的地址為下壹條反匯編的起始地址,這樣就可以進行連續

的反匯編。

例:-U

1298:0200 1E PUSH DS

1298:0201 B80000 MOV AX,0000

1298:0204 50 PUSH AX

1298:0205 B88F12 MOV AX,128F

1298:0208 8ED8 MOV DS,AX

1298:020A B800F0 MOV AX,F000

1298:020D 8EC0 MOV ES,AX

1298:020F BEFEFF MOV SI,FFFE

1298:0212 26 ES:

1298:0213 8A04 MOV AL,[SI]

1298:0215 3CFC CMP AL,FC 1298:0217 750A JNZ 0223

1298:0219 8D166B00 LEA DX,[006B]

1298:021D E82B00 CALL 024B

十五. W(寫)命令

用途: 把正在調試的文件寫入磁盤。

格式: W [address]

說明: 此命令把指令內存區域中的數據寫入文件,壹般用 N 命令來命名文件名, BX:CX 置入文

件長度.

-A

1298:0100 PUSH DS

1298:0101 MOV AX,0000

1298:0104 PUSH AX

1298:0105 MOV AX,128F

1298:0108 MOV DS,AX

1298:010A MOV AX,F000

1298:010D MOV ES,AX

1298:010F MOV SI,FFFE

1298:0112

-RBX

BX 0000

:0000

-RCX

CX 0000

:0012 ;文件長度送 BX:CX

-N A.COM ;文件名為 A.COM

-W ;存入磁盤

Writing 0000F bytes -q

十六. O(輸入)命令

用途: 向指定的端口輸出壹個字節。

格式: O prot address byte

例: -O 300 23 ;從 300H 端口輸出 23H

十七. L(裝入)命令

用途: 把磁盤上的內容裝入內存。

格式: L [address]

例: -N A.COM

-L ;把A.COM文件從磁盤裝入內存。

-U

1298:0200 1E PUSH DS

1298:0201 B80000 MOV AX,0000

1298:0204 50 PUSH AX

1298:0205 B88F12 MOV AX,128F

十八. I(輸入)命令

用途: 從指定的端口顯示出輸入數據。

格式: I port address

例: -I 300

FF ;從 300H 端口讀入 FFH

  • 上一篇:追根溯源的拼音
  • 下一篇:系統平臺設計源代碼
  • copyright 2024編程學習大全網