-244- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
disp code |
pop pop ret endp ends end |
si bx main |
;恢复寄存器 ;返回主过程 |
||||||||||||||||||
![]() 图9-3 "啊"的点阵 |
能够在不启动汉字系统的情况下直接在屏幕上显示出汉字的确是件很有趣的事,很多电子游戏都具有这样的能力。说句实话,这并非是一件很难办的事情。我们已经知道字符是由一组点构成,而现在我们又掌握了画点的方法,那么理所当然我们能够在屏幕上"画"出字符和汉字,问题的关键就在于每个点应画在什么地方。这首先需要将一组点的排列数字化,我们刚刚说过这个问题,下面我举出一个汉字的实例,来更明确地说明这个问题: 图9-3就是GB-2312-80汉字库的第一个字--"啊"的点阵,同西文字符相比,汉字的点阵规模要大一些,达到16 16点。每一行上的16个点可用两个字节表示,描述一个汉字共使用32个字节。我们要解决的第一个问题就是在获得了字模数据后如何处理这32 |
||||||||||||||||||||
个字节。DOTMAP给出了一种算法。下面给出的这个子程序同样可以完成这项工作,不过它使用了一个新的指令--TEST(位测试)。 | |||||||||||||||||||||
![]() |
助记符:TEST(Test) 用 途:测试寄存器或内存单元中一个位或几个位的0,1状态 格 式:TEST 寄存器,立即数 TEST 寄存器,寄存器 TEST 寄存器,存储单元 TEST 存储单元,立即数 TEST 存储单元,寄存器 执 行:CPU将源操作数与目的操作数相"与",但不保留结果,只是根据结 果设置标志位 |
||||||||||||||||||||
disp loop2: |
proc push push push mov mov mov push mov |
near bx si di cx,16 si,offset buffer dx,100 cx bx,8000h |
;DISP子过程 ;保存寄存器 ;处理32个字节(16个字) ;SI寄存器指向文件缓冲区 ;汉字左上角的Y坐标送入DX寄存器 ;暂存CX寄存器中的计数值 ;将"掩模"送入BX寄存器 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |