⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hz.asm

📁 按时大法师的噶速度啊施法速度发送方艾丝凡 按我国阿斯蒂芬
💻 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 + -