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

匯編語言的藝術:準備工作——偵錯工具與段名管理(三)

     編輯:組合語言

二、目標檔偵錯與工具鏈優化

1. 批次檔簡化偵錯流程

使用 symdeb.exe(符號偵錯器)需先生成 .map 檔,操作繁瑣。建議建立兩個批次檔:

  • s.bat:symdeb %1.sym %1.exe(已有 .map 時直接偵錯)
  • sm.bat:mapsym %1.map(聯結後先生成符號表)

symdeb 優勢在於可直接使用原始程式標號、設定中斷點,功能遠超 DEBUG。注意:欲偵錯的標號必須在程式中宣告 PUBLIC,否則無法跳轉。

2. 串列埠雙機遠端偵錯

針對系統級程式(如中斷服務常式),單機偵錯易死機。利用 xtalk + symdeb 經串列埠(COM1/COM2)聯機:

  1. 主機(被測機):MODE COM1:9600,N,8,1 → symdeb myfile.exe
  2. 從機(控制機):啟動 XTALK → SP → 9600 → GO LO(本地連線)
  3. 主機再輸入:=COM1 切換控制權

此時從機控制偵錯步驟,主機顯示執行結果,避免單機偵錯導致系統掛死。

第三節 分類定義:段名標準化

一、段名簡化分類表

為避免段名混亂,建議統一簡碼:

段類型標準段名說明
程式段 (CODE SEGMENT)CGCode Group
資料段 (DATA SEGMENT)DGData Group
索引段 (INDEX SEGMENT)IGIndex Group
記憶段 (MEMORY SEGMENT)MGMemory Group
特設段 (EXTRA SEGMENT)EGExtra Group
堆疊段 (STACK SEGMENT)SGStack Group

同類段超過一組時,尾碼加數字區分(如 CG1、CG2、DG1...)。

二、SEGMENT PUBLIC 後的屬性選項

SEGMENT PUBLIC XXXX
XXXX = CODE  ; 程式段,段間以 000H 填齊至段落邊界
XXXX = DATA  ; 資料段,同上
XXXX = BYTE  ; 位元組對齊,段間緊密相連,最省空間
XXXX = WORD  ; 字對齊,段間緊密但起始位址為雙數
SEGMENT PUBLIC 'XXXX' ; 帶引號:指定聯結順序,依字串排序排列

若需嚴格控制程式位址與長度,宜留空白(不指定屬性)。

三、聯結錯誤診斷:fixup overflow 解析

最棘手的聯結錯誤 fixup overflow at nnnn..,多因段間標號、緩衡區、暫存器使用混淆,導致聯結器無法解析位址。對策:

  1. 錯誤一出現即 Ctrl+C 中斷,記錄首條訊息。
  2. 回原始碼定位該標號位置,前方必有段定義相關錯誤(如段暫存器未正確設定、ASSUME 遺漏、段屬性衝突)。

嚴謹的段名與屬性管理,是避免此類深層錯誤的根本之道。

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