汇编手记之微机显示输出
显示输出。
显示器通过显示适配卡与系统连接,显示适配卡是显示器与微机系统的接口。
由于在微机系统中处理的是二进制模拟量,这些信号量不能直接用以控制屏幕显示。这时,就需要通过一个接口,经过转换模拟量,运算放大…再用以控制屏幕显示。
所谓接口,通俗的理解是一个起缓冲与协调作用的电路模块。缓冲对应运算速度的差异,协调则用以消除不同量之间的转换问题。
早期的显示适配卡是CGA和EGA。目前较高级的显示适配卡是VGA与TVGA。它们都支持两种显示方式:文字和图形显示方式。而每种显示方式又含有不同的显示模式。
目前我只了解一些在汇编环境下的文字显示方式,图形显示方式太复杂,而且,文字显示方式也是“美国电子计算机协会”的标准,对于中文的显示,暂不论。
文本显示方式是指以字符(string)为单位的显示方式。字符包括:A~Z,a~z,0~9。还有一些普通符号:?%¥#…等。以及一些特殊符号,如菱形块和矩兴块。
文本显示方式采用0~3号显示模式,每种显示模式每屏可显示的字符数以及可使用的颜色数目不同。常用的是3号显示模式,此模式之下,显示器屏幕被划分为80列25行。容易算出,3号显示模式下,每屏可显示:25X80=2000个字符。
汇编程序的写屏,就是通过行,列为坐标确定屏幕上的位置的。在3号模式中,左上角,左下角,右上角,右下角的坐标为:(0,0),(24,0),(0,79),(24,79).
在屏幕上显示一个字符,需要两个字节。八位二进制数为一字节(1byte),那么,我们在屏幕上看到的一个字符,实际上是由十六个二进制数0或1构成的。而在汇编语言中,数据的默认位数为:十六位。屏幕显示字符的规则是:一字节为字符代码,一字节为字符属性。由两字节组成一个十六进制数控制屏显字符。A~Z,a~z,0~9…以及键盘上的控制字符,运算符号的字符代码和扫描码可在百度键入“ASCLL码与扫描码表”查询。
字符属性是指字符显示时的特性。在单色显示时,属性定义了闪烁,反相和高亮等显示特性;在彩色显示则多定义了前景色和背景色。一字节的字符属性是这样定义的:D7,D6,D5,D4,D3,D2,D1,D0=BL,R,G,B,I,R,G,B。
其中D7~D0为八位二进制数0或1。
R,G,B为三色:red,grass,blue.(红,绿,蓝)。
BL表示闪烁。当BL位,即D7,为0时表示前景字符不闪烁。为1时表示前景字符闪烁。
I表示亮度:当I ,即D3,为0时,表示前景字符为一般强度;为1时,表示前景字符为高亮度。亮度和闪烁只用于前景。
简言之:位D4~D6组合8种背景色;D0~D3组合16种前景色,BL与I定义前景的闪烁和强度。
例如我要在(0,0)坐标显示一字符,它的字符属性为:背景色黑色,前景色蓝色。那么,字符属性字节就是:00000001。具体的意义是:00000001=BL,R,G,B,I,R,G,B。二进制数00000001换为十六进制数是:01H。
同理,黑底红字:00000100=04H。白底红闪烁字:11110100=0F4H。
就笔者了解,在编程中,无论何种颜色都是通过对“三原色”(红,绿,蓝)的设置调出来的。JAVA.C…等编程语言的调色规则可在百度查询。
评论