![]() | 第9章 图形显示 | -247- | |||||||||||||||||||
表9-1 汉字库中部分字符与汉字的内码 | |||||||||||||||||||||
区位 | 内码 | 字符 | 区位 | 内码 | 字符 | 区位 | 内码 | 字符 | 区位 | 内码 | 字符 | ||||||||||
0102 | A2A1 | 、 | 0401 | A1A4 | ぁ | 1601 | A1B0 | 啊 | 8785 | F5F7 | 黪 | ||||||||||
0103 | A3A1 | 。 | 0402 | A2A4 | あ | 1602 | A2B0 | 阿 | 8786 | F6F7 | 黯 | ||||||||||
0104 | A4A1 | · | 0403 | A3A4 | ぃ | 1603 | A3B0 | 埃 | 8787 | F7F7 | 鼢 | ||||||||||
0105 | A5A1 | ˉ | 0404 | A4A4 | い | 1604 | A4B0 | 挨 | 8788 | F8F7 | 鼬 | ||||||||||
0106 | A6A1 | ˇ | 0405 | A5A4 | ぅ | 1605 | A5B0 | 哎 | 8789 | F9F7 | 鼯 | ||||||||||
0107 | A7A1 | ¨ | 0406 | A6A4 | う | 1606 | A6B0 | 唉 | 8790 | FAF7 | 鼹 | ||||||||||
0108 | A8A1 | 〃 | 0407 | A7A4 | ぇ | 1607 | A7B0 | 哀 | 8791 | FBF7 | 鼷 | ||||||||||
0109 | A9A1 | 々 | 0408 | A8A4 | え | 1608 | A8B0 | 皑 | 8792 | FCF7 | 鼽 | ||||||||||
0110 | AAA1 | ― | 0409 | A9A4 | ぉ | 1609 | A9B0 | 癌 | 8793 | FDF7 | 鼾 | ||||||||||
0111 | ABA1 | ~ | 0410 | AAA4 | お | 1610 | AAB0 | 蔼 | 8794 | FEF7 | 齄 | ||||||||||
知道了某个汉字在字库中的偏移量,又知道一个16 16点的汉字其字模数据为32个字节,就能计算出这个汉字的字模数据在字模库文件中的偏移量,从而可以利用DOS提供的移动文件读写指针的功能定位文件指针并读出字模数据。DOTMAP程序显示的第一个汉字是"文",它的内码是"0C4CEH",根据刚刚给出的公式,可以计算出它的字模数据在字模库文件HZK16中的偏移位置为"[(0CEH-0A1H) 94+(0C4H-0A1H)] 32=21520H",这就是程序中"OFF"数组中定义的第一个数据。下面这个程序就是由DOTMAP程序改进而得,用以验证上述的算法: | |||||||||||||||||||||
DOTMAP2. data assume fname buffer hanzi msg data code assume main |
ASM segment ds:data db db db db ends segment cs: code proc mov mov mov mov int jc mov mov mov |
'hzk16',0 32 dup(0) '文化,中国' 'Press any key to d far ax,data ds,ax dx,offset fname ax,3d00h 21h exit cx,5 bx,ax si,offset hanzi |
;UCDOS的显示字模库文件 ;文件缓冲区 ;待显示的5个汉字字符 isplay the next font.',0dh,0ah,24h ;初始化DS寄存器 ;打开字模库文件 ;若文件操作出错,转EXIT结束进程 ;显示5个汉字字符 ;文件读写指针送入BX寄存器 ;SI寄存器指向汉字串 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |