内存管理实战:直接访问显存与 VGA 文本模式
绕过操作系统,直接写显存!本文教你如何在 VGA 文本模式下用汇编绘制彩色文字、清屏、滚动窗口,理解显示器的底层工作原理。
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 个经典汇编程序实例:从排序到字符串处理》