当前位置:编程学习 > 汇编语言 >>

怎么用8086汇编语言直接往显存里面写入数据值在屏幕上显示汉字?

答案:;用MASM5.0编译通过. 左右光标键变换汉字,【ESC】退出。(另须下载一个16点阵汉字库HZK16) ;在DOS下用字符当点阵显示汉字 data segment DISP_C DB 'H' ;填充点阵字符 DISP_A DB 05 ;属性字节 qs dw 30h+4*0a0h ;定义显示缓冲区起始位置 30H是列起始位,4为起始行,0A0H 为每行字节数(含属性字节) file_n db 'hzk16',0 DB 'HHHHHHHH' buf db 32 dup(0) DB 'HHHHHHHH' 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
其他:往显存里写入像素就行
用像素组成汉字 

上一个:求汇编程序设计的答案(高等教育出版社 王成端主编)653029701@qq.com,谢了!
下一个:王爽的教材,关于一个汇编程序,debug出错,但是不知道原因……

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,