news 2026/6/9 23:56:36

汇编语言全接触-79.汉字显示编程示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
汇编语言全接触-79.汉字显示编程示例

概述:

一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 18:37:39

LOL游戏界面个性化改造实战手册

LOL游戏界面个性化改造实战手册 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了千篇一律的游戏界面?想要在召唤师峡谷中展现独特的个人风格?通过界面美化工具,我们可以轻松实现…

作者头像 李华
网站建设 2026/6/9 18:36:59

PDF-Extract-Kit部署指南:5分钟快速上手PDF智能提取

PDF-Extract-Kit部署指南:5分钟快速上手PDF智能提取 1. 引言 1.1 技术背景与应用场景 在科研、教育和办公场景中,PDF文档常包含大量结构化信息,如数学公式、表格、图文混排内容。传统手动提取方式效率低、易出错,尤其面对批量处…

作者头像 李华
网站建设 2026/6/9 21:24:41

PDF-Extract-Kit技术解析:数学公式识别背后的算法

PDF-Extract-Kit技术解析:数学公式识别背后的算法 1. 引言:PDF内容提取的技术挑战与创新 在学术研究、工程文档和出版领域,PDF格式因其版式固定、跨平台兼容性强而被广泛使用。然而,这种“视觉友好”的特性也带来了内容结构化提…

作者头像 李华
网站建设 2026/6/9 18:41:06

英雄联盟智能助手:5大功能模块深度解析与实战应用

英雄联盟智能助手:5大功能模块深度解析与实战应用 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为繁琐的…

作者头像 李华
网站建设 2026/6/9 18:36:03

PDF-Extract-Kit保姆级教程:解决中文PDF识别难题

PDF-Extract-Kit保姆级教程:解决中文PDF识别难题 1. 引言 在处理学术论文、技术文档或扫描件时,PDF文件中的文字、公式、表格等元素的提取一直是一个令人头疼的问题,尤其是面对复杂的中文排版和混合内容时。传统的OCR工具往往难以准确识别布…

作者头像 李华
网站建设 2026/6/9 21:07:46

springboot整合mybatis-plus(保姆教学) 及搭建项目

一、Spring整合MyBatis (1)将MyBatis的DataSource交给Spring IoC容器创建并管理,使用第三方数据库连接池(Druid,C3P0等)代替MyBatis内置的数据库连接池 (2)将MyBatis的SqlSessionFactory交给Spring IoC容器创建并管理,使用spring-mybatis整…

作者头像 李华