敉沧 发表于 2012-7-9 22:09:47

关于int 10h写像素。「8086」

我想利用写像素这个功能来实现8086汇编在屏幕上输出汉字。
我知道图形模式的起始像素地址是在0a0000h。

我有16*16的汉字数据。每个汉字32字节。
但是我如何能够按照我想要的形式显示到屏幕上?都需要准备什么?
字节如何分配?
中断如何设置?

求教各位鱼油。。

敉沧 发表于 2012-7-10 00:02:48

明天继续蹲点。。

敉沧 发表于 2012-7-10 08:31:42

蹲点。等解答。。

敉沧 发表于 2012-7-10 18:37:20

。。。。苍天啊。大地啊!主啊!
救救我吧,

敉沧 发表于 2012-7-15 09:36:04

T∧T。。没人理我,,

小甲鱼 发表于 2012-7-15 16:50:49

;用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'
bufdb 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
mulbx;待显示汉字在字库的起始位置是: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,
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,
ADD BX,2
MOV ,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:,DL
MOV DL,DISP_A
INC SI
MOV ES:,DL
INC SI
LOOP N2
POP CX
RET

;========================

      
code ends
end start帮你找了下参考代码。

敉沧 发表于 2012-7-15 16:56:11

小甲鱼 发表于 2012-7-15 16:50
帮你找了下参考代码。

^ω^谢谢甲鱼哥~我研究研究。。。。

小甲鱼 发表于 2012-7-15 17:10:16

敉沧 发表于 2012-7-15 16:56 static/image/common/back.gif
^ω^谢谢甲鱼哥~我研究研究。。。。

加油哈,我也是帮忙找找资料~

敉沧 发表于 2012-7-15 18:51:08

小甲鱼 发表于 2012-7-15 17:10
加油哈,我也是帮忙找找资料~

嗯嗯,我正在预谋一个16位汇编的。。七夕程序。。

小甲鱼 发表于 2012-7-15 20:29:19

敉沧 发表于 2012-7-15 18:51 static/image/common/back.gif
嗯嗯,我正在预谋一个16位汇编的。。七夕程序。。

{:5_91:}加油~

後丶倁灬後覺 发表于 2012-7-23 18:21:26

学习学习

shi_1236 发表于 2013-9-8 21:34:28

甲鱼哥真是热心肠!
页: [1]
查看完整版本: 关于int 10h写像素。「8086」