汇编10H中断
.2.1.1 单色字符显示对单色显示,字符的属性定义了字符的显示特性,如字符是否闪烁,是否加强亮度,是否反相显示。单色显示属性字节的各位功能如动画所示。
属性可以有不同的组合,例如可以在屏幕上显示白底黑字(反相显示)代替通常的黑底白字。正常的属性是07(二进制00000111),即背景为黑色(000),前景为白色(111),而闪烁位为正常(0),加强亮度位也是正常(0)。为改变成反相显示,必须使背景为白色(111),前景为黑色(000),所以属性字节的值应为70,即二进制01110000。如果想要黑底白字及闪烁显示,属性值应为87(10000111)。背景为000,前景为001,这种组合可产生下划线。
屏幕上的字符可以按相同的属性显示,也可以按不同的属性显示,如果你设置的属性为00H,字符就显示不出来。
9.2.2.1 控制光标
光标在屏幕上指示字符的显示位置,它不是ASCII字符表中的字符。计算机有专门的硬件来控制光标,我们熟悉的光标符一般是一个下划线或方块符。
利用INT 10H的功能1使光标显现或关闭。这个功能也控制光标行的开始和结束,也就是说控制光标的大小。表示光标行开始和结束的数据分别放在CH和CL的低4位(0―3),当CH 的位为1时,光标不显现出来(关闭);当第4位为0时,光标在屏幕上显现出来。单色显示器的光标大小的范围从0到13。
INT 10H的功能2设置光标位置。光标位置的行号设在DH寄存器中,列号设在DL中。在24×80的显示方式中,坐标设在(0,0)是屏幕的左上角,(24,79)是屏幕的右下角。BH中必须包含被输出的页号,对单色显示器来说,页号总是0。
9.2.2.2 读光标位置
INT 10H功能3是读光标位置,页号必须在BH中指定。此功能把光标位置的行号回送给DH,列号回送给DL。光标大小的参数填入CH和CL,也就是说,在CH和CL中回送的是用功能1设置的光标参数。
例9.9 读0页的当前光标位置。
9.2.2.3 选择显示页
INT 10H的功能5可由程序确定显存中的显示区域。ROM BIOS将CGA的显存分为4页,每页25×80个字符,或分为8页,每页25×40个字符。每一页的起始地址在1KB的边界。这4页的起始地址分别为B800:0000,B800:1000,B800:2000,B800:3000。
例9.10 选择显示页。
9.2.2.4 清屏和卷屏
INT 10H功能6能使屏幕内容上卷指定的行,这个功能需要设置7个参数。如果AL = 0,则实际完成的工作是清除屏幕的功能,它将按AL中的BLANK字符(0)使指定的窗口为空白。
如果屏幕的起始行列不为(0,0),结束的行列不为(24,79),则屏幕只有指定的一部分具有上卷的功能,这个屏幕上的部分区域我们叫做窗口(Window),象这样的窗口我们可以在屏幕上设置多个,这些窗口都可独立使用。如果上卷超过指定窗口的顶部,这些行的内容就消失,出现在窗口底部的新行被填为空格,其属性由BH寄存器决定。
例9.11 编写清除全屏幕的子程序
例9.12 清除左上角为(0,0),右下角为(24,39)的窗口,初始化为反相显示,该窗口相当于全屏幕的左半部分。
例9.13 在屏幕中心的小窗口显示字符。
[图示] 图9.3 16色方式下的属性字节
[表格] 表9.7 16种颜色的组合
颜色 I R G B 颜色 I R G B 颜色 I R G B 颜色 I R G B
黑 0 0 0 0 灰 1 0 0 0 红 0 1 0 0 浅红 1 1 0 0
蓝 0 0 0 1 浅蓝 1 0 0 1 品红 0 1 0 1 浅品红 1 1 0 1
绿 0 0 1 0 浅绿 1 0 1 0 棕 0 1 1 0 黄 1 1 1 0
青 0 0 1 1 浅青 1 0 1 1 灰白 0 1 1 1 白 1 1 1 1