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

匯編語言套裝軟體製作:測試偵錯與研究改進(一)

     編輯:組合語言

第一節 測試偵錯:清醒頭腦,習慣成自然

  • 記錄習慣性錯誤:每次記錄,錯誤漸減,發生時秒速定位。
  • 偵錯非洪水猛獸:一流高手非不犯錯,而是故意忽略細節一氣呵成,事後靠偵錯修正。如繪圖:有人先草圖、有人從細部入手,重在成果。
  • 作者寫法:先定整體結構、備好支架、識別共性、一口氣寫完、追求速度保持感覺、最後補細節。優點:結構精簡、製作極快(8KB 中文系統含偵錯僅 2 月);缺點:超 20KB 記憶力不堪負荷。
  • 訓練建議:循序漸進,寫一段測一段。無絕對把握切勿寫完再調,否則大海撈針。
  • 常見當機原因:PUSH/POP 不平衡、迴圈計數器成負值、段切換失誤。編碼時記錄假想值,勿信記憶。
  • 偵錯日誌:記錄追蹤過程,避免重複從頭。視偵錯為猜謎智力挑戰,享受樂趣。

第二節 研究改進:精益求精的兩大實戰案例

案例一:指令運用優化——通訊處理程式

原碼:84 位元組,語法正確、執行無誤。關鍵在 DX 反覆載入 03F8H~03FDH,高位 DH 不變,僅 DL 變化。每次改 DX 需 3 位元組,改 DL 仅 2 位元組;共 11 次載入,首次必須載 DX,其餘 10 次省 10 位元組。INC DX 更仅 1 位元組。合併重複輸出指令、合併 MOV AL,0E08H 等技巧,最終壓縮至 66 位元組(減近 20%)、速度更快。藝術要求絲毫不苟,唯訓練有素、追求完美者能為。

優化後核心片段:

MOV DH, 3          ; DH 固定為 3
MOV DL, 0FDH       ; 輸出埠
...
MOV DL, 0F8H       ; LSB 速度
...
INC DX             ; MSB 速度
SUB AL, AL
...
MOV DL, 0FBH       ; 行控制
MOV AL, DH         ; AL=3 (DH 值)
...
INC DX             ; 通訊控制
...
MOV DL, 0F9H       ; 中斷有效
SUB AL, AL
CSNDA: OUT DX, AL  ; 共用輸出指令
...
MOV DL, 0FCH       ; 通訊控制
MOV AX, 0E08H      ; 合併:暫停中斷 + 顯示屬性
OUT DX, AL
...
JMP CSNDA          ; 循環回共用出口

案例二:迴路實例——Hercules 顯示卡中文輸出

目標:將 16×16 點陣字形送上 Hercules 640×400 四區交錯顯存。原迴路 10 行,關鍵在區界檢測:

ADD DI, 1FFEH      ; 跨區偏移
JNS CDSP2          ; 未溢位繼續
ADD DI, 8050H      ; 溢位換區換行

常規寫法需 CMP DI,8000H / JB / SUB DI,8000H,多 4 位元組指令 + 4 時鐘週期 × 16 次 = 64 週期損失。全螢幕 1000 字累積可觀。取消迴路展開雖快 272 週期但增 130 位元組;改用 JS 分支僅增 2 位元組卻快 36 週期;預載 BX=1FFEH, DX=8050H 再 ADD DI,BX / ADD DI,DX,每次快 2 週期,展開後空間增 94 位元組、快 304 週期,全螢幕 8MHz 下加速 1/25 秒。

迴路鐵律:極力避免 PUSH/POP(27 週期)、緩衝區存取;善用暫存器、常數即時置入;變數值需模組設計階段妥善安排。空間換時間是否值得,視時效嚴格度而定。

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