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

組合語言圖形程式設計:跑動小人動畫完整實作(320×200 模式)

     編輯:組合語言

前言

在 DOS 時代,利用 VGA 320×200 256 色模式(Mode 13h)配合自訂字型繪製動畫,是組合語言入門的經典專題。本文完整解析一個僅 1KB 的 .EXE 動畫程式:四幀 8×8 字元合成的「跑動小人」,巧用 LOOP 延時與字型重定向實現流暢動畫,無需系統計時器中斷。

核心技術架構

1. 視訊模式與調色盤設定

; 設定 Mode 13h (320x200x256)
mov ah, 0
mov al, 13h
int 10h

; 設定調色盤:背景藍、前景黃
mov ah, 10h
mov bh, 1
mov bl, 0      ; 背景色索引
int 10h
mov bh, 0
mov bl, 1      ; 前景色索引
int 10h

2. 自訂字型載入(INT 21h AH=25h)

將四組 32 字元(每組 8×8=64 位元組,共 256 位元組)的點陣資料 boyd 設為中斷向量 1Fh(系統字型 80h-FFh 對應),使 INT 10h AH=09h 直接繪製這些字元。

mov al, 1Fh
mov dx, offset boyd
mov ah, 25h
int 21h

3. 四幀動畫資料結構

每幀 32 字元(80h-9Fh, A0h-BFh, C0h-DFh, E0h-FFh),每字元 8 位元組(8 掃描列),共 256 位元組/幀。資料以十六進位位元組陣列定義,例如:

; Frame 1 片段
db 0,1,7,31,4 dup(63)        ; 字元 82h
db 120,252,244,240,240,240,176,176 ; 字元 83h

動畫主迴圈詳解

frame1:
    mov ascii, 80h      ; 起始字元碼
    mov frame, 1
startfr:
    sub dx, dx          ; DH=行, DL=列 (0,0)
drawchar:
    mov ah, 2           ; 設定游標位置
    mov bh, 0
    int 10h
    mov ah, 9           ; 寫入字元屬性
    mov cx, 1           ; 重複 1 次
    mov bl, 03h         ; 屬性:黃前景(3) 藍背景(0) → 03h
    mov al, ascii
    int 10h
    inc ascii
    inc dl
    cmp dl, 3
    jna drawchar        ; 寬 3 字元
    mov dl, 0
    inc dh
    cmp dh, 3
    jna drawchar        ; 高 3 字元
    call delay          ; 簡易延時
    inc frame
    cmp frame, 4
    jna startfr         ; 4 幀循環

關鍵點解析

  • 雙層迴圈:外層 frame 切換 4 幀,內層 DH/DL 掃描 3×3 字元區塊(實際顯示 24×24 像素)。
  • 屬性字元:BL=03h 同時設定前景/背景色,CX=1 單字元輸出。
  • 無計時器延時:delay 使用 MOV CX,10000 / LOOP $ 空迴圈,視 CPU 速度調整流暢度。

退出與資訊顯示

; 檢查鍵盤狀態 (INT 21h AH=0Bh)
mov ah, 0Bh
int 21h
cmp al, 0FFh
jne frame1             ; 無鍵則繼續動畫

; 回復文字模式 80x25
xor dx, dx
xor bp, bp
mov ax, 3
int 10h

; 顯示個人資訊 (INT 10h AH=13h 字串輸出)
mov bp, offset out_char
mov cx, len_str
mov dh, 0
mov dl, 33
mov al, 1
mov bl, 0Eh
mov ah, 13h
int 10h

編譯與執行

; TASM 5.0 / MASM 5.0 均可
tasm boy.asm
tlink /t boy.obj
boy.exe

技術亮點總結

  1. 極致體積:單一 .EXE 僅 1KB,展示組合語言的空間效率。
  2. 字型重導向:善用 DOS INT 21h AH=25h 覆寫系統字型向量,無需直接操作顯存。
  3. 字元圖形模式:以文字模式介面(INT 10h AH=09h)繪製像素級動畫,簡化座標計算。
  4. 無中斷設計:純輪詢+軟體延時,適合教學與極簡系統。

延伸應用建議

  • 改用 INT 1Ah 計時器實現固定幀率(如 18.2Hz → 約 10 FPS)。
  • 擴充為 16×16 像素精靈,使用 INT 10h AH=0Ch 直接寫入顯存。
  • 加入鍵盤控制(INT 16h)實現互動移動。

這個小程式雖簡單,卻串聯了視訊模式設定、調色盤控制、字型重定義、文字模式圖形輸出、軟體延時與模式切換等核心技能,是組合語言圖形程式設計的完美入門範例。

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