以下是示例程序:
data
segment
string
db
'山花烂漫$'
data
ends
code
segment
assume
cs:code,ds:data
main
proc
far
start:
mov
ax,data
mov
ds,ax
mov
dx,offset
string
mov
ah,09h
int
21h
mov
ah,4ch
int
21h
ret
main
endp
运用int 10h中断……比如要显示“一”,则先编码:
00000000 00
00000000 00
00000000 00
00000000 00
11111111 ff
00000000 00
00000000 00
00000000 00
然后再写:
one db 00h,00h,00h,00h,0ffh,00h,00h,00h
mov ax, ds
mov es, ax
mov ah, 10h 子功能号
mov al, 00h 加载自定义字符
mov bh, 08h 每个字符占字节数
mov bl, 00h 字符表
mov cx, 01h 自定义字符数量
mov dx, 41h 自定义字符ASCII开始值,这里是从'A'开始
lea bp, one 指针es:bp指向自定义字符表
int 10h 执行修改……
然后输出字符'A'就是自己定义的“一”字了,举唤拍用同样的方法定义其他汉正羡字……
一般汉字是一个ASCII占半个汉字,也就是先编码左半边,再编链租码右半边……
http://hi.baidu.com/hnhhww/blog/item/5f018a32b61f0283a9018ef6.html?timeStamp=1321491942953在DOS下用字符当衡禅点阵显示汉字
可用左右光标键翻页,<ESC>退出
需下载HZK16点阵字库支持
data segment
DISP_C DB 'H' 填充点阵字符
DISP_A DB 05 属性字节
qs dw 30h+4*0a0h 定义显示缓冲区起始位置 30H是列起始位,4为起始行,0A0H
为每行字节数(含属性字节)
file_n db 'hzk16',0
buf db 32 dup(0)
err_s db 0dh,0ah,'Open file HZK16 err! $'
file_hand dw 0
data ends
code segment
assume cs:code, ds:data
main proc far
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
MOV AH,0FH CLS
INT 10H
MOV AH,0
INT 10H
-------------------------
mov ah,3dh open file
mov dx ,offset file_n
mov al,0 read
int 21h
jNc OPEN_FILE_OK
mov ah,9
mov dx,offset err_s Open file HZK16 err!
int 21h
ret
OPEN_FILE_OK:
mov file_hand,ax save file hand
mov ax,'雅' 待芹拦拿显示的汉字
NN:
PUSH AX 汉字进栈
sub ax,0a1a1h
puSh ax
xchg ah,al
xor ah,ah
mov bl,94 汉字共94区,每一嫌搭区94位
mul bl
pop bx
xor bh,bh
add ax,bx
mov bx,32
mul bx 待显示汉字在字库的起始位置是:DX:AX
MOV CX,DX
MOV DX,AX
MOV AH,42H 移动文件指针到CX:DX位置
MOV AL,0 从字库文件HZK16起始位置计算
MOV BX,FILE_HAND
INT 21H
MOV AH,3FH READ FILE
MOV BX,FILE_HAND
MOV CX,32 READ 32 BYTE
MOV DX,OFFSET BUF
INT 21H
MOV AX,0B800H DISP
MOV ES,AX
MOV SI,QS
MOV BX,OFFSET BUF READ 16X16 HZK16
MOV CX,16 每次读入2字节,需读16次 (共32字节)
N1:
MOV AX,[BX]
XCHG AH,AL
CALL DISP
INC BX
INC BX
ADD SI,0A0H-32 DISP NEXT 行
LOOP N1
POP DX 汉字出栈
K_1:
MOV AH,1
INT 16H
JZ K_1
CMP AH,4BH <<<前一个汉字
JZ LEFT
CMP AH,4DH >>>后一个汉字
JZ RIGHT
CMP AL,1BH <ESC>TO EXIT
JZ EXIT
JMP KEY_C
LEFT:
SUB DL,1
JMP KEY_C
RIGHT:
ADD DL,1
KEY_C: 清键盘缓冲区
PUSH DS
PUSH AX
PUSH BX
MOV AX,40H
MOV DS,AX
MOV BX,1AH
MOV AX,[BX]
ADD BX,2
MOV [BX],AX
POP BX
POP AX
POP DS
MOV AX,DX 循环前将汉字存AX
JMP NN
EXIT:
RET
main endp
========================
DISP PROC NEAR 每次显示2个字节共16位
PUSH CX
MOV CX,16
N2:
ROL AX,1
JC DISP1
MOV DL,' '
JMP DISP_K
DISP1:
MOV DL,DISP_C
DISP_K:
MOV ES:[SI],DL
MOV DL,DISP_A
INC SI
MOV ES:[SI],DL
INC SI
LOOP N2
POP CX
RET
========================
code ends
end start
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)