标题:[求助]关于显示汉字
只看楼主
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册: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
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:20 
先要确定d:\里有没有HZK16这个档案, dir d:\HZK16
若有的话会显示其名称,大小和日期
2016-12-01 20:52
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
得分:0 
有的

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-12-02 09:18
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册: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
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
得分:0 
放在同一个目录下可以找到,谢谢了

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-12-03 10:43
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-471844-1-1.html




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

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