使用 symdeb.exe(符號偵錯器)需先生成 .map 檔,操作繁瑣。建議建立兩個批次檔:
s.bat:symdeb %1.sym %1.exe(已有 .map 時直接偵錯)sm.bat:mapsym %1.map(聯結後先生成符號表)symdeb 優勢在於可直接使用原始程式標號、設定中斷點,功能遠超 DEBUG。注意:欲偵錯的標號必須在程式中宣告 PUBLIC,否則無法跳轉。
針對系統級程式(如中斷服務常式),單機偵錯易死機。利用 xtalk + symdeb 經串列埠(COM1/COM2)聯機:
MODE COM1:9600,N,8,1 → symdeb myfile.exeXTALK → SP → 9600 → GO LO(本地連線)=COM1 切換控制權此時從機控制偵錯步驟,主機顯示執行結果,避免單機偵錯導致系統掛死。
為避免段名混亂,建議統一簡碼:
| 段類型 | 標準段名 | 說明 |
|---|---|---|
| 程式段 (CODE SEGMENT) | CG | Code Group |
| 資料段 (DATA SEGMENT) | DG | Data Group |
| 索引段 (INDEX SEGMENT) | IG | Index Group |
| 記憶段 (MEMORY SEGMENT) | MG | Memory Group |
| 特設段 (EXTRA SEGMENT) | EG | Extra Group |
| 堆疊段 (STACK SEGMENT) | SG | Stack Group |
同類段超過一組時,尾碼加數字區分(如 CG1、CG2、DG1...)。
SEGMENT PUBLIC XXXX
XXXX = CODE ; 程式段,段間以 000H 填齊至段落邊界
XXXX = DATA ; 資料段,同上
XXXX = BYTE ; 位元組對齊,段間緊密相連,最省空間
XXXX = WORD ; 字對齊,段間緊密但起始位址為雙數
SEGMENT PUBLIC 'XXXX' ; 帶引號:指定聯結順序,依字串排序排列
若需嚴格控制程式位址與長度,宜留空白(不指定屬性)。
fixup overflow 解析最棘手的聯結錯誤 fixup overflow at nnnn..,多因段間標號、緩衡區、暫存器使用混淆,導致聯結器無法解析位址。對策:
Ctrl+C 中斷,記錄首條訊息。ASSUME 遺漏、段屬性衝突)。嚴謹的段名與屬性管理,是避免此類深層錯誤的根本之道。