首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

DOS DEBUG 命令完整參考指南

     編輯:組合語言

前言

DEBUG 是 DOS 內建的多功能除錯工具,自 DOS 1.0 起隨附至今。它支援組語、反組譯、記憶體檢視/修改、I/O 埠存取、磁碟扇區讀寫、擴充記憶體 (EMS) 管理等功能,是組語開發者、逆向工程師、系統維護人員的必備利器。本文整理自官方文件,詳細說明每個命令語法、參數、範例與注意事項。

命令速查表

命令功能常用語法
A組譯 (Assemble)A [address]
C比較記憶體C range address
D顯示記憶體D [range]
E輸入/修改記憶體E address [list]
F填充記憶體F range list
G執行程式G [=address] [breakpoints]
H十六進制運算H value1 value2
I輸入埠讀取I port
L載入檔案/扇區L [address] / L address drive start number
M移動/複製記憶體M range address
N指定檔案/參數N [drive:][path]filename
O輸出埠寫入O port byte-value
P執行子程式/迴圈P [=address] [count]
Q離開 DEBUGQ
R顯示/修改暫存器R [register]
S搜尋記憶體S range list
T單步追蹤T [=address] [count]
U反組譯U [range]
W寫入檔案/扇區W [address] / W address drive start number
XA配置 EMS 頁面XA [count]
XD釋放 EMS 控制代碼XD [handle]
XM對應 EMS 頁面XM [lpage] [ppage] [handle]
XS顯示 EMS 狀態XS

重點命令詳細說明

A (Assemble) - 組譯指令

  • 直接輸入助憶符產生機器碼,支援 8086/8087/8088 指令集。
  • 段前綴:CS:、DS:、ES:、SS:;遠端返回用 RETF。
  • 字串指令需明確大小:MOVSW (16-bit)、MOVSB (8-bit)。
  • 跳轉/呼叫自動判斷短/近/遠,可用 NEAR/FAR 強制指定。
  • 記憶體運算元需加 BYTE PTR/WORD PTR(縮寫 BY/WO)。
  • 方括號 [] 表示記憶體定址,立即數不加括號。
  • 偽指令:DB 定義位元組、DW 定義字組,支援字串與數值混合。
-A 100
0D62:0100 MOV AX, 1234
0D62:0103 MOV [BX], AX
0D62:0105 DB 'Hello', 0
0D62:010B

D (Dump) - 顯示記憶體

  • 預設顯示 128 位元組,格式:位址、十六進制位元組 (每行 16 字節、中間以 - 分隔)、ASCII 字元 (不可列印顯示為 .)。
  • D CS:100 110 顯示範圍;D CS:100 L 20 顯示 20h 字節。

E (Enter) - 修改記憶體

  • E CS:100 進入互動模式:顯示目前值,可輸入新值、Space 移下一位、- 回上一位、Enter 結束。
  • E CS:100 41 42 "ABC" 直接批次寫入。

G (Go) - 執行含中斷點

  • G =100 120 130 從 CS:100 執行,在 CS:120、CS:130 設暫時中斷點。
  • 最多 10 個中斷點,執行至中斷點自動停下並顯示暫存器。

L (Load) - 載入檔案或扇區

  • 無參數:載入 N 指定檔案至 CS:100,BX:CX 回傳位元組數。
  • L 1000:載入至指定位址。
  • L 1000 2 0F 6D:略過檔案系統,直接讀磁碟機 2 (C:),從邏輯扇區 0Fh 讀 6Dh 個扇區。
  • .EXE 檔會自動重定位,標頭不進記憶體;.HEX 檔視為 Intel Hex 格式。

N (Name) - 指定檔案與命令列參數

  • 第一用途:N FILE.EXE 設定後續 L/W 目標檔案。
  • 第二用途:N PARAM1 PARAM2 設定被測程式的命令列參數,G 執行時自動傳遞。
  • 影響記憶體區域:CS:5C (FCB1)、CS:6C (FCB2)、CS:80 (參數長度)、CS:81 起始參數字串。

P (Proceed) - 程序/迴圈/中斷單步執行

  • 遇 CALL、INT、LOOP、REP 字串指令時,一次執行完整個子程式/迴圈再停下,而非單步進入。
  • P =143F 在 CALL 指令處執行完子程式返回。

R (Register) - 暫存器與旗標

  • R 顯示所有暫存器、旗標、下一條指令反組譯。
  • R AX 修改單一暫存器。
  • RF 進入旗標修改模式:輸入雙字母代碼 (OV/NV, DN/UP, EI/DI, NG/PL, ZR/NZ, AC/NA, PE/PO, CY/NC)。

U (Unassemble) - 反組譯

  • U 100 L 10 從 CS:100 反組譯 10h 位元組。
  • 輸出格式:位址、機器碼、助憶符。

W (Write) - 寫入檔案/扇區

  • 寫入前必須用 N 指定檔名,且 BX:CX 為寫入位元組數。
  • 不可寫入 .EXE/.HEX 檔;直接寫扇區極度危險,可能損壞檔案系統。

EMS 相關命令 (XA/XD/XM/XS)

  • 需安裝符合 LIM EMS 4.0 的驅動程式 (如 EMM386.EXE)。
  • XA 8 配置 8 頁 (128KB) EMS,回傳控制代碼。
  • XM 5 2 0003 將控制代碼 0003 的邏輯頁 5 對應至實體頁 2。
  • XS 顯示所有控制代碼、頁面配置、頁框段位址統計。

實用技巧與常見陷阱

  • 區段:位移 格式:CS:100、DS:200,預設區段依命令而定 (U/D 用 CS,E/F/S 用 DS)。
  • 範圍指定:100 110 (起迄) 或 100 L 10 (起始+長度)。
  • ROM 追蹤限制:P/T 無法追蹤唯讀記憶體 (ROM/BIOS) 程式碼。
  • 寫入扇區警示:W address drive start number 略過檔案系統,錯誤參數會導致資料遺失。
  • 預設暫存器:啟動時段暫存器指向可用記憶體低端,IP=0100h,SP=FFEEh,旗標全清,其餘為 0。

總結

DEBUG 雖然介面樸素,但功能極為強大,涵蓋從指令級除錯到硬體 I/O、磁碟編輯、EMS 管理的完整工具鏈。熟練掌握其命令,能在無原始碼環境下完成程式分析、修補、資料救援等高階任務。建議搭配 HELP 命令 (部分版本支援) 或列印本速查表隨身備查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved