庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>安全技术>软件破解>反汇编>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

汉字显示编程示例

 作者:本站收集   日期:2005-5-27
字号选择〖 〗/ 双击滚屏 单击停止   
概述:
    一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读 UCDOS 16点字库文件的示例。
    在 UCDOS 的点阵字库 HZK16 中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为 A1A1H,汉字内码第一位为区码,每区为 94 个汉字,第二位为每区内的编码,每个汉字的点阵为 16点*16点 共32字节,数据按第一行 1-8点,9-16点,第二行 1-8点,9-16点...排列,每位数据 1 为要显示点,0 为不显示点。汉字点阵数据在字库中的偏移量为 ((区码-A1H)*94 + (区内编码-A1H))*32。
    本程序为一个简单的例子,要显示的汉字在变量 DISP_DATA 中,且没有考虑汉字、英文混用的情况。

源程序:

; Write in May 22,1996
;            By LuoYunBin ----- http://asm.yeah.net

.286
LINE_CHAR	EQU	210	;在屏幕上第几行显示
COL_CHAR	EQU	230	;在屏幕上第几列显示
COLOR_CHAR	EQU	0EH	;显示颜色
CHARS		EQU	(offset disp_data_end-offset disp_data)/2
CODE		SEGMENT
		ASSUME CS:CODE,DS:CODE
		ORG 100H
START:
		jmp	install
CC_FILE		DB	'C:\UCDOS\HZK16',0	;字库文件名,用 UCDOS 的16点阵汉字库
HANDLE		DW	?			;file handle
DISP_DATA	DB	'罗云彬'		;要显示的汉字
DISP_DATA_END	EQU	THIS BYTE
D_OPEN_ERROR	DB	'File C:\UCDOS\HZK16 not found !',0dh,0ah,24h
install:
		mov	ax,3d00h		;打开汉字库
		mov	dx,offset cc_file
		int	21h
		jnb	open_ok
		          
		mov	ah,9
		mov	dx,offset d_open_error
		int	21h
		int	20h
open_ok:
		mov	handle,ax
		mov	si,offset disp_data
		mov	di,offset zi_buffer
		mov	cx,chars
		cld
ins2:
		lodsb
		mov	ah,al
		lodsb
		call	get_dots		;读出汉字点针
		loop	ins2
		call	disp_cc			;显示到屏幕
		int	20h
GET_DOTS	PROC
		pusha
		sub	ax,0a1a1h	;汉字的内码从 A1区开始
		cwd
		mov	dl,al		;所以绝对开始区是内码-A1
		mov	al,ah		;点阵在字库中的位置为	
		cbw
		mov	bl,94		;((汉字码1-A1)* 94 + 汉字码2 - A1)* 32
		mul	bl
		add	ax,dx
		mov	bx,32
		mul	bx
		mov	cx,dx
		mov	dx,ax
		mov	ax,4200h	;移动读写指针到点阵数据位置
		mov	bx,handle
		int	21h
		mov	ah,3fh
		mov	cx,32
		mov	dx,di
		int	21h
		popa
		add	di,32
		ret
GET_DOTS	ENDP
DISP_CC		PROC
		mov	ax,12h		;640*480 mode
		int	10h		;设置640*480/16色显示模式
		mov	cx,chars
		mov	si,offset zi_buffer
		mov	bx,col_char-20	;BX = column
dh_lop0:
		add	bx,20		;every char column+20
		push	cx
		mov	cx,16		;l6 lines/char
		mov	dx,line_char	;DX = start line
dh_lop1:
		push	bx
		push	cx
		lodsb			;16 dots/line
		mov	ah,al
		lodsb
		mov	cx,16
dh_lop2:
		shl	ax,1
		push	ax
		push	bx
		push	cx
		jc	db_color
		xor	al,al		;back color is 0
		jmp	short db_draw
db_color:
		mov	al,color_char
db_draw:
		mov	ah,0ch
		mov	cx,bx
		xor	bh,bh
		int	10h
		pop	cx
		pop	bx
		pop	ax
		inc	bx		;inc column
		loop	dh_lop2
		inc	dx		;next line
		pop	cx
		pop	bx
		loop	dh_lop1
		pop	cx
		loop	dh_lop0
		xor	ah,ah
		int	16h
		mov	ax,3
		int	10h
		ret
DISP_CC		ENDP
ZI_BUFFER	EQU	THIS BYTE

CODE		ENDS
		END START

上一篇:如何产生一个BMP文件    下一篇:CD-ROM出盒、入盒程序  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-5-27
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿