📄 hz.asm
字号:
;=============================================
;program name :hz.asm
;by :Long_Qun
;date :2008,12,9
;desciption :show Chinese word (han zi)
;=============================================
.MODEL SMALL,STDCALL
.386
INCLUDE LONG.INC
INCLUDELIB LONG.LIB
DATA SEGMENT
HZ_NAME DB 'Hzk16',0 ;漢字字庫
DAO DW '龙'
DOC_CODE DW ?
HZ_BUFFER DB 32 DUP(?)
I DB 2
J DB 1
I_COUNT DB 16
J_COUNT DB 16
TMP_WORD DW ?
HEAD_MSG DB 'Press ESC to quit$'
DATA ENDS
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,0B800H
MOV ES,AX ;VGA buffer
MOV AH,0
MOV AL,03H
INT 10H ;set mode
INVOKE SHOW_STRING,OFFSET HEAD_MSG ;show head_msg
INVOKE DRAW_WINDOW,17H,5,25,20,56 ; prepare for word, 16*32(16*16 is OK,but width<height,it is ugly)
;(5,25)---->(20,56), width is doubled,
INVOKE OPEN_FILE,OFFSET HZ_NAME ;open CHinese word set
JNC OPEN_OK
CALL EXIT
OPEN_OK:
MOV DOC_CODE,AX
CALL GET_HZ ; get 32 bytes from hzk to buffer
CALL SHOW_HZ ;paint a Chinese word depended on buffer
CMP_AGAIN:
MOV AH,0 ;esc to quit
INT 16H
CMP AL,1BH
JNE CMP_AGAIN
CALL EXIT
;-----------------------------------------------------
GET_HZ PROC NEAR
MOV SI,OFFSET DAO ;word
MOV DI,OFFSET HZ_BUFFER ;buffer
CLD
LODSW
SUB AX,0A1A1H ;;;;;;from a1a1 start
MOV BL,AL
MOV BH,0
MOV AL,AH ;94 words per ah(sector)
MOV CL,94
MUL CL
ADD AX,BX ;bx is secotr offset
MOV CX,32 ;each Chinese word, 32 bytes
MUL CX
MOV CX,DX
MOV DX,AX
MOV BX,DOC_CODE ;mov file pointer to the Word needed
MOV AX,4200H
INT 21H
INVOKE READ_FILE,DOC_CODE,32,SEG HZ_BUFFER,OFFSET HZ_BUFFER
RET
GET_HZ ENDP
;-----------------------------------------------------
SHOW_HZ PROC NEAR
MOV I,5
MOV J,25
MOV SI,OFFSET HZ_BUFFER
MOV I_COUNT,16
LOOP_LINE:
MOV J_COUNT,16
LODSB
MOV AH,AL
LODSB
MOV TMP_WORD,AX
LOOP_COLUMN:
MOV AX,TMP_WORD ;pop ax
SHL AX,1
MOV TMP_WORD,AX ;push ax
JNC NOT_PAINT ; one bit dermine paint or not
INVOKE MAKE_VGA_POINTER,I,J
MOV DI,AX
INC DI
MOV AL,0F0H
MOV ES:[DI],AL
ADD DI,2 ;width doubled
MOV ES:[DI],AL
NOT_PAINT:
ADD J,2 ;width doubled
DEC J_COUNT
CMP J_COUNT,0
JNE LOOP_COLUMN
INC I
MOV J,25
DEC I_COUNT
CMP I_COUNT,0
JNE LOOP_LINE
RET
SHOW_HZ ENDP
;------------------------------------------------------
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -