从最底层实现汉字输出,一个中文启动界面的实现方法

来源:互联网 发布:淘宝订单贷款逾期 编辑:程序博客网 时间:2024/06/01 08:17
导读:

  从最底层实现汉字输出,一个中文启动界面的实现方法

  呵呵,要再次感谢赵博的书给我的启发,现在想什么就可以自己去实践,这种感觉真好。这两天我实践了一个中文显示问题,终于成功,贴出来与大家共享。tkr7y<

  通过实践,大概了解图形模式下的工作方式,和汉字支持的基本实现方法。我的工作是让系统启动后在屏幕上显示“汉字操作系统”五个汉字dQ/Wf

  说明:这里只介绍使用点阵字库。gX)znG

  准备工作:f

  1、首先必须创建相应的点阵信息URp

  我们来创建一个16×16的两个汉字的点阵,其实很简单,你在纸上画一个行列z`4

  各有16个格子的方块出来,然后按其大小,在里面写一个字,比如”成“,建hwy

  议你写得粗一点,这时你会发现有些格子中被字的笔画穿过,有的仍是空格?q

  子,现在你把没有笔画穿过的记为0,有笔画的记为1,从第一行开始,将这个[

  16×16的“点阵”的信息记下来,由于每行有16个位,所以需要2个字节来记录一!Xh

  行,共16行,所以共需2×16=32个字节来保存一个字的“点阵”.ya

  比如:汉-->00000h,04008h,037fch,01008h,08208h,06208h,02210h,00910hX%^fYH

  01120h,020A0h,0E040h,020A0h,02110h,02208h,0240Eh,00804h"|8y

  当然我这个“点阵”是从别的字库里载取出来的,但上面的方法绝对是可行的;

  点阵本质上就是这样生成的。h%

  2、编写一个显示一个像素的子程序>l^

  面临的任务:在图形模式下,在屏幕上打印一个像素点|

  分析:MW

  所需的变量:初始的左上角的坐标值x0,y0)!tX

  默认参数: 默认分辨率为640×480×16色模式{U

  (因为这是VGA标准BIOS支持的模式)8.6n@`

  默认颜色为黑底黄字aU{

  实现:(参考了《VGA实用编程技术》罗健军 清华大学出版社 1995)v

  ;功能::8 /nm

  ; 在指定的屏幕位置用指定的颜色画一个点5k$_@^

  ;入口参数:ND.}

  ; bx = x0 象素在屏幕上的X坐标j

  ; ax = y0 象素在屏幕上的Y坐标{

  ; cl = color 象素的颜色值f'e

  writePix procm>(

  linelen = 80 ;640*480*16色模式下一条扫描线占用的字节数o

  ;=Width/8/i}

  ;计算象素点的位置 msO

  push esD9

  push bpE2:~k

  push dxDrmT

  push axG

  push dir}uNc

  push cxe`

  push bx)x

  ,z;

  P~k

  mov bp,sp>-t

  mov cl,3!u

  shr bx,cl ;X0/8BXJq

  mov cx,linelen~U

  mul cx,;)