MASM調試彙編代碼(指令行方式)
以 【輸出helloworld】為例,講解MASM用指令方式調試彙編代碼的方法。
目錄
- MASM調試彙編代碼(指令行方式)
-
-
- 總覽
- t指令
- p指令
- r指令
- u指令
- g指令
- d指令
- q指令
-
代碼:
DATA SEGMENT ;資料段
HELLO DB 'Hello World!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT ;代碼段
ASSUME CS:CODE,DS:DATA ;段寄存器分别與哪些段有關
START: MOV AX,DATA
MOV DS,AX ;設定資料段
MOV DX,OFFSET HELLO ;輸出
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS ;代碼段結束
END START ;源代碼結束
進入調試的方法:如
debug 程式名.exe
debug hello.exe
總覽
常用指令 :t、r、d
- t:執行下一條語句。
- u:檢視彙編代碼。
- g:跳轉到該記憶體所對應的語句
- r:檢視寄存器的内容(後可直接接寄存器的名稱,就隻檢視該寄存器的内容)。
- d:後接記憶體位址,檢視該位址後面 8 * 16 個位元組空間的位址(每行 16 個位元組,共 8 行)後面是對應的字元‘.’表示沒有該數字對應的字元。
- p:與T指令一樣完成跟蹤程式的運作, 但遇到子程式、中斷程式、循環時并不跟蹤下去, 而是把它們當作一條指令來執行。
- q:退出debug
t指令
- T 【起始位址】【指令條數】
- 逐條跟蹤程式的運作, 同時顯示出各寄存器的内容、狀态标志和下一條要執行的指令
- 當執行夠指定的指令數後就暫停程式的運作。
- 如果不指定起始位址, 則從CS:IP處開始執行。
- 不指定指令條數, 則認為隻執行一條指令。

p指令
格式:
- p 【起始位址】【指令條數】
- 與T指令一樣完成跟蹤程式的運作, 但遇到子程式、中斷程式、循環時并不跟蹤下去, 而是把它們當作一條指令來執行。
r指令
格式:
- r
- 顯示目前所有寄存器内容, 狀态标志及将要執行的下一條指令的位址、代碼和彙編指令形式。
- r 寄存器
- 顯示并修改指定寄存器的内容
u指令
格式
- u 【位址】
- u 【位址1】【位址2】
将指定位址範圍内的機器代碼翻譯成彙編源程式指令顯示出來, 并同時顯示位址及代碼。
反彙編時一定确認指令的起始位址, 否則得不到正确的結果。
g指令
運作程式指令
格式:
- g 【起始位址】【斷點位址】
從起始位址開始執行程式, 直到程式結束或遇到斷點位址為止,如果不指定起始位址, 則從CS:IP處開始執行。
如果程式執行到結束,則顯示"Program terminated normally"。如果遇到斷點, 則程式停止執行, 并顯示當時各寄存器的内容 和下一條要執行的指令。
d指令
格式:
- d 【位址】
- d 【位址1】 【位址2】
說明:D指令在螢幕上顯示的内容分為三部分, 左邊是每一行存儲單元的起始位址, 中間是各位元組單元的内容, 右邊是各單元内容對應的ASCII碼字元( 不可顯示的字元用"."代替)。
q指令
直接輸入q,退出debug