![]() | 第6章 文字输出与键盘输入 | -121- | |||||||||||||||||||
BL=字符的属性字节 CX=显示字符的个数 调 用:INT 10H 返 回:无 |
|||||||||||||||||||||
此功能并不难理解,但有一点需要解释--什么是显示页号? 这个问题同显示卡上的RAM有关。不同的显示卡所带的RAM量是不同的,MDA卡有4KB RAM,CGA卡有16KB RAM,标准EGA和VGA有256KB RAM。程序要显示一个字符,必须送两个字节数据到显示RAM中,第一个字节是字符的ASCII码,第二个字节就是属性字节。 如果当前屏幕上最多可以显示80列×25行即2000个字符,那么显示卡就必须具有4KB的RAM才可以放下2000个字符的数据。MDA卡上的4KB RAM就是由此而来,而且由于这4KB存储器仅够存储一个屏幕的字符,所以MDA卡没有分显示页的问题。 而CGA卡则不同,它有16KB存储器,按刚才讨论的标准它的RAM可以装下4个屏幕的字符数据,所以我们将CGA的存储器分成4个区,每一个区就称为一个显示页。程序可以向不同的显示页中写入字符及属性,不过只有写入当前正被显示卡电路处理的那个显示页的字符才能出现在屏幕上,这个显示页就称为"当前显示页"。 系统启动时默认当前显示页为第0页,即系统默认使用显示RAM最前面的4KB,当然我们可以通过程序改变当前显示页,这将在后面讨论。 下面这个程序演示了属性字节的应用,运行这个程序可以观察到不同RGB组合成的色彩,也可以看到属性字节中I位和F位的作用。 |
|||||||||||||||||||||
data attrib data code main |
segment assume db db db db db db db db db db db ends segment assume proc mov mov mov mov |
ds:data 00000001b 00000010b 00001010b 00000011b 00100110b 01010011b 01011011b 10000011b 10001011b 11010011b 11011010b cs:code far ax,data ds,ax al,41h ah,09h |
;属性字节表 ;初始化DS寄存器指向数据段 ;准备显示大写字母A ;10H中断的09H功能 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |