源程序:
; Write in May 22,1996 ; By LuoYunBin ----- http://asm.yeah.net .286 LINE_CHAR EQU 210 ;在屏幕上第几行显示 COL_CHAR EQU 230 ;在屏幕上第几列显示 COLOR_CHAR EQU 0EH ;显示颜色 CHARS EQU (OFFSET DISP_DATA_END-OFFSET DISP_DATA)/2 CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H START: JMP INSTALL CC_FILE DB 'C:\UCDOS\HZK16',0 ;字库文件名,用 UCDOS 的16点阵汉字库 HANDLE DW ? ;file handle DISP_DATA DB '罗云彬' ;要显示的汉字 DISP_DATA_END EQU THIS BYTE D_OPEN_ERROR DB 'File C:\UCDOS\HZK16 not found !',0DH,0AH,24H INSTALL: MOV AX,3D00H ;打开汉字库 MOV DX,OFFSET CC_FILE INT 21H JNB OPEN_OK MOV AH,9 MOV DX,OFFSET D_OPEN_ERROR INT 21H INT 20H 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 ;显示到屏幕 INT 20H 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_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 CODE ENDS END START