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

VGA 調色盤演示經典:COL 組合語言源碼賞析

     編輯:組合語言

程式概覽

COL 是一個針對 VGA 文字模式(80×25,16 色)的調色盤展示程式,採用 TASM 語法(cseg segment),直接操作顯示記憶體 B800h 繪製完整 16×16 色彩矩陣:每列固定背景色(0-F),每行遞增前景色(0-F),以 '#' 字元填滿螢幕,頂端顯示十六進制列標「0123456789ABCDEF」。

核心顯示邏輯

直接寫入顯示記憶體

  • MOV ES, CS:[VIDEO] 設 ES=B800h(文字模式顯示緩衝區段址)
  • MOV AX, 3 / INT 10h 清螢幕並設 80×25 文字模式
  • 雙層迴圈:外層 16 列(背景色),內層 16 行(前景色)
  • 每格佔 2 位元組:低位元組 ASCII 碼('#'=23h),高位元組屬性位元組(背景<<4 | 前景)
  • STOSW 寫入雙位元組並自動遞增 DI

屬性位元組編碼

; BH = 背景色<<4 | 前景色
; 範例:背景藍(1) 前景亮白(F) → 1Fh

程式以 COL 變數追蹤當前背景色屬性基值,每換列 ADD COL, 10h(背景色左移 4 位)。前景色在內層迴圈以 INC BH 遞增。

十六進制數字顯示輔助例程

  • HEX2:將 AL 拆為高/低 4 位,分別呼叫 HEX1
  • HEX1:CMP AL,10 / JB HNUM1 判斷 0-9 或 A-F,ADD AL,'0' 或 ADD AL,'A'-10 轉 ASCII,寫入顯示緩衝區
  • MESS:以屬性色輸出零結尾字串(COLR2 列標、COLOUR 提示字)

技術亮點

  • 零 DOS 呼叫,純 BIOS(INT 10h 設模式)+ 直接記憶體映射 I/O
  • 完整展示 VGA 文字模式屬性位元組結構:Bit 7=閃爍, Bit 6-4=背景, Bit 3=亮度, Bit 2-0=前景
  • 雙層迴圈 + STOSW 高效填充螢幕,無冗餘運算
  • 代碼極其緊湊(<100 行),適合作為「直接顯示記憶體操作」教學範例

現代對應

現代圖形堆疊雖以 GPU 框架緩衝區取代 B800h,但「像素格式定義、色彩空間編碼、雙緩衝交換」核心概念一脈相承。WebGL gl_FragColor、Canvas 2D fillStyle、CSS rgba() 本質上皆為「屬性編碼 → 硬體解碼 → 顯示」管線的高層抽象。

建置提示

TASM /m COL
TLINK /t COL
; 產生 COL.COM,直接在 DOS 或 DOSBox 執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved