80x25彩色字符模式下显示缓冲区的结构:
在内存地址空间中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区。往这个地址空间中写入数据,写入的内容会立即出现在显示器上
在80x25彩色字符模式下,显示器每行可以显示80个字符,可以显示25行。所以称为80x25,彩色字符模式是因每个字符可以有256种颜色属性(背景色,前景色,闪烁,高亮等)
这样一个字符需要占用一个字节的数据+一个字节的颜色属性(256种即8位,即一个字节),低位字节存储字符的ASCII码,高位字节存储字符的颜色属性。
一个字符需要占2字节内存,一屏幕共80x25=2000个字符,占用4000字节, 所以B8000H~BFFFFH共32KB的空间共可以存放8页的彩色字符数据。
一般情况下显示第一页的字符数据,即B8000H~B8F9FH中的4000个字节存放的彩色字符将显示在屏幕上。
一行共80个彩色字符,即160个字节:
B8000H~B809FH 对应显示器第1行
B80A0H~B813FH 对应显示器第2行
B8140H~B81DFH 对应显示器第3行
。。。
B8F00H~B8F9FH 对应显示器第25行
一个彩色字符占2字节,一行80个彩色字符占160个字节即10H:
00~01 对应显示器上第1列
02~03 对应显示器上第2列
04~05 对应显示器上第3列
.。。。
9E~9F 对应显示器上第80列
颜色属性的格式:
颜色属性占1个字节即8位:
7 6 5 4 3 2 1 0
含义 BL R G B I R G B
闪烁 (456- 背景) 高亮 (012-前景)
R-红 G-绿 B-蓝
可以按位设置不同的属性字节,配出各种不同的前景色和背景色:
红底绿字 01000010B,16进制显示为42H
(第7位闪烁,不需要所以为0,第6位背景红色需要设为1,第5位不需要0.。。。。)
例: 在显示器0行0列显示红底高亮闪烁绿色的字符串’ABCDEF':
①按位设置颜色属性为: 11001010B,16进制显示为CAH
②ABCDEF对应的ASCII码分别为 41H,42H,43H,44H,45H,46H
③显示器的0行0列对应的内存地址为 B8000H,6个彩色字符占用12个字节,即应写在B8000~B800BH内存空间中
显示缓冲区中的内容为:
00 01 02 03 04 05 06 07 08 09 0A 0B ...
B800:0000 41 CA 42 CA 43 CA 44 CA 45 CA 46 CA ...
(闪烁效果需要在全屏DOS方式下才能看到)