ITEEDU

文本模式下图形字符的显示

概述:

在文本显示模式下,常常可以见到一些字符集里没有的字符,如几个汉字,一个电话符号,还有如 Norton 的 NDD,SPEEDISK 内的窗口边框等等。这些字符是用改变系统的显示字符集的办法实现的。具体来说,就是将一些暂时不用的字符的显示点阵换成自己定义的点阵,然后在显示这些字符时,屏幕上出来的就是自己定义的图像。当然,原来的字符将无法显示,所以,被替换的字符往往是一些不常用的制表符等字符。被替换掉的字符集将一直使用到下次用 INT 10H 的 AH=00H 功能重新设置显示模式时。

有关资料:

1.BIOS 中断 10H 的 11H 入口参数: AH = 11H

功能号 入口参数 出口参数
AL=00H或10H
装用户规定的字模
ES:BP=指定的字符点阵
CX=装入的字符数目
DX=从哪个字符开始装入
BL=要装入的模式
BH=每个字符点阵的数据字节数

汇编编程示例:

;定义字符点阵,下面是一个电话的符号,因为用一个字符的位置显示一个电话是不够的,所以下面是两个字符点阵的数据,要注意前16字节是电话的左半边,后16字节是电话的右半边,你把下面的数据化成二进制一看便知,不过就这32字节可花了我半小时在纸上画框框,打叉叉...
;比如以下的数据是这样得到的

; ........ 0000 0000 00h
; ..xxxxxx 0011 1111 3fh
; .x...... 0100 0000 40h
; .x.xxxxx 0101 1111 5fh
; .x.x..x. 0101 0010 52h
; .xxx.x.. 0111 0100 74h
; ....x.xx 0000 1011 0bh
; ...x.x.. 0001 0100 14h
; ..x.x..x 0010 1001 29h
; .x..x.x. 0100 1010 4ah
; .x..x..x 0100 1001 49h
; .x...x.. 0100 0100 44h
; .x....xx 0100 0011 43h
; ..xxxxxx 0011 1111 3fh
; ........ 0000 0000 00h
; ........ 0000 0000 00h

        CHAR  DB        00H,3FH,40H,5FH,52H,74H,0BH,14H     ;left part of phone
              DB        29H,4AH,49H,44H,43H,3FH,00H,00H

              DB        00H,0F8H,04H,0F4H,094H,5CH,0A0H,50H ;right part of phone
              DB        28H,0A4H,24H,44H,84H,0F8H,00H,00H

              STR       DB 'This is a phone:',0CEH,0CFH,'$'

...

              MOV       AX,1100H    ;功能号
              MOV       BX,1000H    ;BH=10H,每字符点阵为16字节
              MOV       CX,2        ;共要装入2字节
              MOV       DX,00CEH    ;从00CEH开始(00CEH,00CFH)
              MOV       ES,DATA_SEGMENT
              MOV       BP,OFFSET CHAR          ;ES:BP为字符点阵数据地址
              INT       10H

              MOV       AH,9        ;把字符 ce,cf显示出来看看,是什么!
              MOV       DX,OFFSET STR
              INT       21H