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 个经典汇编程序实例:从排序到字符串处理》