📄 inout.asm
字号:
include macro.lib
extrn busy:byte,openkeyboard:byte,color:word,movflag_key:byte,old_pos_x:word,new_pos_x:word
extrn new_pos_y:word,old_pos_y:word,closeintr:byte
extrn store_b:far
public printf,printf1,printf2,printf3,putchar,putint
extern writepoint:far,drawline:far
;===================================
data segment para public 'data'
hzkname db 'fontlib\hzk16',0
ascname db 'fontlib\asc16',0
filecode dw 0
buf db 32 dup(0)
length_read dw 0
x dw 0
y dw 0
x1 dw 0
y1 dw 0
asc dw 0
textcolor dw 0
backcolor dw 0
address dd 0
time db 3
number db 5 dup(0)
wei_num db 0
data ends
;==============================================
code segment public 'code'
assume cs:code,ds:data,es:data
.386
;==============================================
;功能:显示汉字串
;入口参数:ax---x,bx--y为起始坐标,di指向待显示的字符串
;bp 文本颜色,SI写入方式固定为P_COPY
;出口参数:无
printf proc far
pusha
push ds
push es
mov si, P_COPY
mov dx,ds
mov es,dx
mov dx,data
mov ds,dx
mov textcolor,bp
mov x,ax
mov y,bx
openfile hzkname,0 ;打开汉字库
jc exit
mov filecode,ax
lopa: mov bx,es:[di] ;取出内码
cmp bx,0 ;判断是否结束
je next
sub bh,0a1h ;计算字模地址
sub bl,0a1h
mov al,94
mul bl
movsx bx,bh
add ax,bx
mov cx,32
mul cx
mov cx,dx ;移动文件指针
mov dx,ax
mov al,0
mov ah,42h
mov bx,filecode
int 21h
readfile filecode,buf,32 ;读字模
push di
call write_zi
pop di
inc di
inc di
jmp lopa
next: closefile filecode
exit: pop es
pop ds
popa
ret
printf endp
;====================================================
;功能:显示汉字
;入口参数:textcolor为文本颜色
; x,y为起始坐标,buf为字模缓冲区
;出口参数:x,y为下一个字符的显示位置
write_zi proc near
lea di,buf
mov cl,16
mov ax,y
mov bx,x
lopb: mov ch,16
mov dx,[di]
xchg dh,dl
lopc: shl dx,1
jnc next
mov bp,textcolor
call writepoint
next:
inc bx
dec ch
jne lopc
inc ax
mov bx,x
inc di
inc di
dec cl
jne lopb
add x,16
ret
write_zi endp
;===========================================
;功能:显示字符串
;入口参数:ax,bx为起始坐标,DI指向待显示的字符串
;BP 文本颜色,SI写入方式固定为P_COPY
;出口参数:无
printf1 proc far
pusha
push ds
push es
mov cx,ds
mov es,cx
mov cx,data
mov ds,cx
mov x,ax
mov y,bx
openfile ascname, 0 ;打开ASCII字库
jc exit
mov filecode,ax
lopd: mov bl,es:[di] ;取出ASCII码
cmp bl,0 ;判断是否结束
je next3
movsx bx,bl
mov ax,16
mul bx
mov cx,dx ;移动文件指针
mov dx,ax
mov al,0
mov ah,42h
mov bx,filecode
int 21h
readfile filecode,buf,16 ;读字模
push di
call write_asc
pop di
inc di
jmp lopd
next3: closefile filecode
exit: pop es
pop ds
popa
ret
printf1 endp
;==================================================
;功能:显示字符
;入口参数:textcolor为文本颜色
; x,y为起始坐标,buf为字模缓冲区
;出口参数:x,y为下一个字符的显示位置
write_asc proc near
lea di,buf
mov cl,16
mov ax,y
mov bx,x
mov si,P_COPY
lope: mov ch,8
mov dl,[di]
lopf: shl dl,1
jnc next
call writepoint
next:
inc bx
dec ch
jne lopf
inc ax
mov bx,x
inc di
dec cl
jne lope
add x,8
ret
write_asc endp
;==========================================================
;功能:显示字符
;入口参数:bp为文本颜色
; bx--x, cx---y为起始坐标,al字符ASCII码
;出口参数:无
putchar proc far
pusha
push ds
mov di,data
mov ds,di
mov x,bx
mov y,cx
xor cx,cx
mov cl,al
openfile ascname, 0 ;打开ASCII字库
jc exit
mov filecode,ax
mov ax,16
mul cx
mov cx,dx ;移动文件指针
mov dx,ax
mov al,0
mov ah,42h
mov bx,filecode
int 21h
readfile filecode,buf,16 ;读字模
call write_asc
exit: closefile filecode
pop ds
popa
ret
putchar endp
;=================================================
;输出一个整数
;入口参数:AX ---x, BX--y ,BP---COLOR,dx--为要输出的整数
putint proc far
pusha
push ds
mov cx, data
mov ds, cx
mov cx, bx
mov bx, ax
mov ax, dx
mov dl, 10
again: div dl
or al, al
jz next
mov dh, al
mov al, ah
mov ah, 0
push ax
inc wei_num
mov ax, 0
mov al, dh
jmp again
next:
mov al, ah
mov ah, 0
push ax
inc wei_num
.REPEAT
pop ax
add ax, 30h
call putchar
add bx,8
dec wei_num
.UNTIL wei_num == 0
pop ds
popa
ret
putint endp
;==============================================================
;动画字,延迟出字
;入口参数:ax---x,bx--y为起始坐标,di指向待显示的字符串
;bp 文本颜色,SI写入方式固定为P_COPY
;出口参数:无
printf2 proc far
pusha
push ds
push es
mov si, P_COPY
mov dx,ds
mov es,dx
mov dx,data
mov ds,dx
mov textcolor,bp
mov x,ax
mov y,bx
openfile hzkname,0 ;打开汉字库
jc exit
mov filecode,ax
lopa: mov bx,es:[di] ;取出内码
cmp bx,0 ;判断是否结束
je next
sub bh,0a1h ;计算字模地址
sub bl,0a1h
mov al,94
mul bl
movsx bx,bh
add ax,bx
mov cx,32
mul cx
mov cx,dx ;移动文件指针
mov dx,ax
mov al,0
mov ah,42h
mov bx,filecode
int 21h
readfile filecode,buf,32 ;读字模
push di
call write_zi
delay 10
pop di
inc di
inc di
jmp lopa
next: closefile filecode
exit: pop es
pop ds
popa
ret
printf2 endp
;动画字,延迟出字
;入口参数:ax---x,bx--y为起始坐标,di指向待显示的字符串
;bp 文本颜色,SI写入方式固定为P_COPY
;出口参数:无
printf3 proc far
pusha
push ds
push es
mov si, P_COPY
mov dx,ds
mov es,dx
mov dx,data
mov ds,dx
mov textcolor,bp
mov x,ax
mov y,bx
openfile hzkname,0 ;打开汉字库
jc exit
mov filecode,ax
lopa: mov bx,es:[di] ;取出内码
cmp bx,0 ;判断是否结束
je next
sub bh,0a1h ;计算字模地址
sub bl,0a1h
mov al,94
mul bl
movsx bx,bh
add ax,bx
mov cx,32
mul cx
mov cx,dx ;移动文件指针
mov dx,ax
mov al,0
mov ah,42h
mov bx,filecode
int 21h
readfile filecode,buf,32 ;读字模
push di
call write_zi
delay 1
pop di
inc di
inc di
jmp lopa
next: closefile filecode
exit: pop es
pop ds
popa
ret
printf3 endp
code ends
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -