内存管理实战:直接访问显存与 VGA 文本模式

绕过操作系统,直接写显存!本文教你如何在 VGA 文本模式下用汇编绘制彩色文字、清屏、滚动窗口,理解显示器的底层工作原理。

2

VGA 文本模式

DOS 默认运行在 80×25 文本模式。显存起始地址:B800:0000

显存结构

每个字符占 2 字节:

  • 字节 1:ASCII 码
  • 字节 2:属性(前景色 + 背景色)
1
2
3
偏移 0: 'H'(48h)  属性 (07h)  → 白字黑底 'H'
偏移 2: 'e'(65h)  属性 (07h)  → 白字黑底 'e'
...

属性字节

含义
0-2 前景色(0-7)
3 前景高亮
4-6 背景色(0-7)
7 闪烁

颜色值:0=黑 1=蓝 2=绿 3=青 4=红 5=紫 6=棕 7=白

实战:彩色输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
MOV AX, 0B800h
MOV ES, AX          ; ES 指向显存段

MOV DI, 0           ; 屏幕左上角
MOV AL, 'A'         ; 字符
MOV AH, 1Ch         ; 属性:红底白字
MOV ES:[DI], AX     ; 写入显存

; 清屏
CLEAR_SCREEN PROC
    MOV AX, 0B800h
    MOV ES, AX
    MOV DI, 0
    MOV CX, 2000    ; 80*25 = 2000 字符
    MOV AX, 0720h   ; 空格 + 白字黑底
    CLD
    REP STOSW       ; 重复写入
    RET
CLEAR_SCREEN ENDP

实战:滚动窗口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SCROLL_UP PROC
    MOV AH, 06h     ; BIOS 滚动功能
    MOV AL, 1       ; 滚动行数
    MOV BH, 07h     ; 空白行属性
    MOV CH, 0       ; 左上角行
    MOV CL, 0       ; 左上角列
    MOV DH, 24      ; 右下角行
    MOV DL, 79      ; 右下角列
    INT 10h
    RET
SCROLL_UP ENDP

总结

直接操作显存让你理解图形系统的底层逻辑。现代 GUI 虽然复杂,但核心思想不变:内存映射到像素。

下一篇:《10 个经典汇编程序实例:从排序到字符串处理》

广告
广告位预留中 (728x90)