从最底层实现汉字输出,一个中文启动界面的实现方法
来源:互联网 发布:淘宝订单贷款逾期 编辑:程序博客网 时间: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,;)
从最底层实现汉字输出,一个中文启动界面的实现方法
呵呵,要再次感谢赵博的书给我的启发,现在想什么就可以自己去实践,这种感觉真好。这两天我实践了一个中文显示问题,终于成功,贴出来与大家共享。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,;)
- 从最底层实现汉字输出,一个中文启动界面的实现方法
- 金额从数字转换成中文汉字大写的实现
- Android应用启动界面的实现方法
- mysql支持中文汉字排序的实现方法
- unorder_map的底层实现方法
- 一个最简单的CLI命令行界面实现
- Android启动过程的底层实现
- delphi 实现多语言界面的最简单方法
- 实现从一个界面返回有导航条的界面然后再跳转到下一个界面
- C# 实现启动欢迎界面的简单方法
- Android应用启动界面的两种实现方法
- java实现中文汉字的首字母排序
- java实现中文汉字的首字母排序
- java实现中文汉字的首字母排序
- Mysql中文汉字转拼音的实现
- java实现中文汉字的首字母排序
- java实现中文汉字的首字母排序
- java实现中文汉字的首字母排序
- 技术文章,链接收藏.
- 不能使用 mb_strlen 函数的问题
- VS 2005 快捷键
- 实现 目标另存为 的效果
- 服务端口大全+注解
- 从最底层实现汉字输出,一个中文启动界面的实现方法
- malloc()
- 启动IIS出现 0x8ffe2740 错误的解决办法
- srand()
- 六级新大纲词汇表
- 在ubuntu搭建wiki 以及论坛
- 11.3
- 【Fedora core 7.0】给CDLinux增加包的方法
- WinCE程序开发-1