| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 2081 人关注过本帖, 1 人收藏
标题:[求助]关于显示汉字
只看楼主 加入收藏
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:48
帖 子:1158
专家分:1015
注 册:2006-12-17
结帖率:100%
  已结贴   问题点数:20  回复次数:6   
[求助]关于显示汉字
程序代码:
data segment
 LINE_CHAR    EQU    210    ;在屏幕上第几行显示
COL_CHAR    EQU    230    ;在屏幕上第几列显示
COLOR_CHAR    EQU    0EH    ;显示颜色
CHARS        EQU    (offset disp_data_end-offset disp_data)/2

 CC_FILE        DB    'D:\HZK16',0    ;字库文件名,用 UCDOS 的16点阵汉字库
HANDLE        DW    ?            ;file handle
DISP_DATA    DB    '罗云彬'        ;要显示的汉字
DISP_DATA_END    EQU    THIS BYTE
 D_OPEN_ERROR    DB    'File D:\HZK16 not found !',0dh,0ah,24h
 
data ends
;

;
code segment
main proc far
assume cs:code,ds:data
start:
 push ds
 sub ax,ax
 push ax
 mov ax,data
 mov ds,ax

 mov    ax,3d00h        ;打开汉字库
mov    dx,offset cc_file
 int    21h
 jnb    open_ok
        
 mov    ah,9
 mov    dx,offset d_open_error
 int    21h

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            ;显示到屏幕
MOV AX,4C00H
 INT 21H
GET_DOTS    PROC
 push ax
 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
 pop ax
 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

main endp
code ends
 end start


我这个程序,HZK16在,为什么一直提示File D:\HZK16 not found !
搜索更多相关主题的帖子: 汉字  
2016-12-01 09:37
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:204
专家分:1362
注 册:2016-5-15
  得分:20 
先要确定d:\里有没有HZK16这个档案, dir d:\HZK16
若有的话会显示其名称,大小和日期
附件: 您没有浏览附件的权限,请 登录注册
2016-12-01 20:52
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:48
帖 子:1158
专家分:1015
注 册:2006-12-17
  得分:0 
有的
附件: 您没有浏览附件的权限,请 登录注册

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-12-02 09:18
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:204
专家分:1362
注 册:2016-5-15
  得分:0 
z班竹可以将HZK16和程序放在同一个文件夹,应该能找到的了.
另外,这代码须转换成12h显示模式,这样只能在纯dos或dosbox下才能运行,我把程序略作修改.
以ASCII的文字字元,也就是放大显示,可在任何模式,win7/8/10的dos或dosbox等都可以运行....

程序代码:

.286
Which_Char    EQU     219  ;方块
;
Which_Char    EQU     2Ah ; *
Max_char        equ    5  ;不能超过5 (80/16)
DATA SEGMENT
CC_FILE        DB    'HZK16',0    ;字库文件名,用 UCDOS 的16点阵汉字库
HANDLE        DW    ?            ;file handle
DISP_DATA    DB    '司空摘星'        ;[司空摘星] 要显示的汉字
CHARS        EQU    ($ - offset DISP_DATA) /2
D_OPEN_ERROR    DB    'HZK16 font file not found !',0dh,0ah,24h
ZI_BUFFER    db    Max_char * 32 dup (0)
DATA ENDS

CODE        SEGMENT
        ASSUME CS:CODE,DS:DATA
;-------------------------------------------------------------------------------
START:          MOV AX,DATA
          MOV DS,AX
          MOV ES,AX
        mov    ax,3d00h        ;打开汉字库
        mov    dx,offset cc_file
        int    21h
        jnb    open_ok
   
        mov    ah,9
        mov    dx,offset d_open_error
        int    21h
        jmp    short  quit        
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    clrscr
        call    disp_FONT            ;显示到屏幕
        mov     ah,7
        int    21h
quit:        mov     ah,4ch
        int    21h
;-------------------------------------------------------------------------------
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_FONT    PROC
        mov    si,offset zi_buffer
        mov    bp,chars        ;3-5?
        mov    dx,0        ;first position
        
dh_lop0:        push     dx
        mov     cx,16           ;line no.

dh_lop1:        push    cx
        call    SetClr
        mov     bx,[si]
        xchg     bl,bh
        mov    cx,16        ;char no.
dh_lop2:
        shl    bx,1
        mov     al,Which_Char             ;* 或 方块(219)
        jc    db_draw
        mov    al,20h        ;back char is space
db_draw:
        int     29h
        loop     dh_lop2
        inc     dh        ;next line
        add    si,2
        pop    cx
        loop    dh_lop1
        ;    1 chars finish
        pop    dx
        add    dl,16        ;next char position
        dec    bp
        jnz    dh_lop0
        ret
disp_FONT    ENDP
;-------------------------------------------------------------------------------
ClrScr: ;清屏
        mov ax,0600h       ;cls
        mov bh,7       ;normal attribute
        mov cx,0       ;top left
        mov dx,6079       ;bottom right
         int 10h
        mov dx,0000       ;top left
SetClr:        mov ah,02       ;move curvor to left top
        mov bx,0       ;zero page
        int 10h
        ret
;-------------------------------------------------------------------------------
CODE        ENDS
        END START
--------------------------------------------------------------------------------


附件: 您没有浏览附件的权限,请 登录注册
2016-12-02 20:23
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:48
帖 子:1158
专家分:1015
注 册:2006-12-17
  得分:0 
放在同一个目录下可以找到,谢谢了

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-12-03 10:43
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:48
帖 子:1158
专家分:1015
注 册:2006-12-17
  得分:0 
你那程序写的很好

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-12-03 10:44
shanxidls
Rank: 1
来 自:山西运城
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-5-14
  得分:0 
回复 6楼 zhulei1978
请问版主,那字库的名好建,可里边放的字库能不能给一个,或在那儿找?谢谢

近年倒霉走麦场遭遇恐怖已六载跟踪迫害是常事网上捣乱家常饭
2017-05-17 11:12







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031359 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved