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

📄 wordtest.asm

📁 这是一个打字计时练习的程序,在缓冲区中预放了一些字母,运行时,可按照屏幕上 显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间.
💻 ASM
字号:
red_chr macro ;读取字符宏定义 
mov ah,0 
int 16h 
endm 
string macro p1 ;输入字符光标 
mov ah,9 
lea dx,p1 
int 21h 
endm 
win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口 
mov ah,06h 
mov al,opr1 
mov bh,opr2 
mov ch,opr3 
mov cl,opr4 
mov dh,opr5 
mov dl,opr6 
int 10h 
endm 
pos_curse macro op1,op2,op3 ;定义光标位置 
mov ah,2 
mov bh,op1 
mov dh,op2 
mov dl,op3 
int 10h 
endm 
pos_get macro ;显示光标位置 
mov ah,03h 
mov bh,0 
int 10h 
endm 
data segment ;定义数据段 
menu db 'File Edit Help $' 

mass_1 db 'F1 Active file F10 Active help','$' 
manu_1 db ' New ',13,10,'$' 
manu_2 db ' Open ',13,10,'$' 
manu_3 db ' Save ',13,10,'$' 
manu_4 db ' Save as ',13,10,'$' 
manu_5 db ' Exit ','$' 
handle dw ? 
message1 db ' Please input file name:','$' 
message2 db ' Please input save file name:','$' 
message3 db ' Please input open file name:','$' 
message4 db ' ***The file is not save! Save it now? (Y/N)***: ','$' 
path db 50 dup(0),'$' 
buffer db 2000 dup(?) 
bak db 3850 dup(0) 
line db ? 
row db ? 
char db ? 
help_mas1 db ' welcome use editor! $' ;帮助内容 
help_mas2 db 'please the first active help! $' 
help_mas3 db 'good lucky!! $' 
help_mas4 db '==========================================================$' 
help_mas5 db 'Press F1 to active file. $' 
help_mas6 db 'You can use DOWN cursor key to choose the fuction $' 
help_mas7 db 'Press F10 to show the help massage.Press Esc To Quit$' 
date db 'today ??/??/','$' ;调用日期 
hanglie db '???//???','$' ;行//列 
data ends 
code segment 
main proc far ;主程序 
assume cs:code,ds:data 
start: 
push ds 
sub ax,ax 
push ax 
mov ax,data 
mov ds,ax 
call wind 
call edit 
ret 
main endp 
wind proc near ;创建窗口子程序 
win 0,3eh,1,0,24,79 ;定义窗口背景 
win 1,1fh,0,0,0,79 
win 0,1fh,24,0,24,79 
show: ;显示菜单位置及内容 
pos_curse 0,0,1 
mov ah,9 
lea dx,menu 
int 21h 
show_2: ;显示状态栏位置及内容 
pos_curse 0,24,1 
mov ah,9 
lea dx,mass_1 
int 21h 
call win3 
call win4 
pos_curse 0,1,0 
mov row,dh 
mov line,dl 
wind endp 
edit proc near 
char_get: ;读字符 
call com 
com proc near ;定义功能键 
pos_get 
mov row,dh 
mov line,dl 
first: 
pos_curse 0,row,line 
j00: mov ah,0 
int 16h ;从键盘读字符 ah=扫描码 al=字符码 
push ax 
lea dx,buffer 
mov buffer[bx],al 
inc bx 
cmp ah,48h ;上 
jz up_1 
cmp ah,50h ;下 
jz down_1 
cmp ah,4bh ;左 
jz left 
cmp ah,4dh ;右 
jz right 
cmp ah,1ch ;回车 
jz enter_1 
call fuc_key 
mov ah,2 
mov dl,al 
int 21h 
pop ax 
call menu_show 
jmp j6 
down_1: 
jmp down 
enter_1: 
jmp enter_2 
up_1: jmp up 
left: ;光标左移 
pos_get 
mov row,dh 
mov dl,line 
cmp line,0 
jnz direct 
mov line,79 
dec row 
cmp row,0 
je stop2 
jmp first 
stop2: 
mov row,1 
jmp first 
direct: 
dec line 
call win4 ;显示光标位置 
jmp first 
right: ;光标右移 
pos_get 
mov row,dh 
mov dl,line 
cmp line,79 
jnz direct2 
mov line,0 
inc row 
cmp row,24 
je returns1 
jmp first 
direct2: 
inc line 
call win4 
jmp first 
enter_2: 
jmp enter 
up: ;上移光标 
pos_get 
mov row,dh 
mov dl,line 
dec row 
cmp row,0 
je stop1 
call win4 
jmp first 
stop1: 
mov row,1 
jmp first 
down: ;下移光标 
pos_get 
mov row,dh 
mov dl,line 
inc row 
cmp row,24 
je stop3 
call win4 
jmp first 
stop3: 
mov row,23 
jmp first 
returns1: 
jmp returns 
enter: ;回车换行 
pos_get 
mov row,dh 
mov line,dl 
inc row 
cmp row,24 
je returns 
mov line,0 
call win4 
jmp first 
returns: 
mov row,24 
mov line,0 
jmp first 
j6: 
ret 
com endp 
fuc_key proc near ;功能键子程序 
next: 
cmp ah,47h ;home 
jz home 
cmp ah,4fh ;end 
jz _end 
cmp ah,0eh ;backspace 
jz bak_sp 
cmp ah,53h 
jz del 
cmp ah,44h ;F10 
jz help_0 
ret 
help_0: call help 
home: ;HOME键的功能 
pos_get 
mov row,dh 
mov line,0 
call win4 
jmp first 
_end: ;END键的功能 
pos_get 
mov row,dh 
mov line,79 
call win4 
jmp first 
bak_sp: ;退格键的功能 
pos_get 
mov row,dh 
mov line,dl 
cmp line,0 
je stop 
dec line 
jmp ab 
stop: 
mov line,0 
ab: 
pos_get 0,row,line 
mov ah,2 
mov dl,00 
int 21h 
call win4 
jmp first 
del: ;DEL删除 
pos_get 
mov row,dh 
mov line,dl 
dec line 
pos_get 0,row,line 
mov ah,2 
mov dl,00 
int 21h 
inc line 
call win4 
jmp first 
cm: 
cmp line,00 
jz pos_cm 
pos_cm: 
pos_curse 0,0,0 
jmp first 
help proc near ;显示帮助信息 
call savedisplay ;显示帮助信息每行的位置 
pos_get 
push dx 
win 0,57h,4,5,21,70 
pos_curse 0,6,25 
string help_mas1 
pos_curse 0,8,11 
string help_mas2 
pos_curse 0,10,11 
string help_mas3 
pos_curse 0,12,11 
string help_mas4 
pos_curse 0,14,11 
string help_mas5 
pos_curse 0,16,11 
string help_mas6 
pos_curse 0,18,11 
string help_mas7 
pop dx 
pos_curse 0,dh,dl 
mov ah,0 
int 16h 
cmp ah,36h ;F10 active help 
jnz cls 
call help 
cls: 
win 0,1eh,9,10,13,70 ;清屏 
call backdisplay 
help endp 
fuc_key endp 
menu_show proc near ;显示菜单 
call savedisplay 
push cx 
cmp ah,3bh ;F1功能 
jz menu_sh 
jmp char_get 
menu_sh: ;定义菜单的背景字体颜色 
pos_get 
push dx 
win 0,06h,2,1,7,11 
win 0,65h,1,0,6,10 
pos_curse 0,1,0 
string manu_1 
string manu_2 
string manu_3 
string manu_4 
string manu_5 
pop dx 
dec dl 
pos_curse 0,dh,dl 
copmar: 
red_chr 
cmp ah,50h 
jz manu_n 
jmp manu_hid 
manu_hid: ;菜单隐藏 
win 0,1eh,1,1,7,11 
call backdisplay 
jmp char_get 
manu_n: ;开始定义各个菜单项 
win 0,65h,5,1,5,8 
pos_curse 0,5,0 
string manu_5 
win 0,15h,1,1,1,8 
pos_curse 0,1,0 
string manu_1 
red_chr 
cmp ah,48h 
je manu_n 
cmp al,0dh 
jz new_1 
cmp ah,50h 
je manu_o 
jmp manu_hid 
manu_n0: 
jmp manu_n 
manu_o: 
win 0,65h,1,1,1,8 
pos_curse 0,1,0 
string manu_1 
win 0,15h,2,1,2,8 
pos_curse 0,2,0 
string manu_2 
red_chr 
cmp ah,48h 
je manu_o 
cmp al,0dh 
jz open_1 
cmp ah,50h 
je manu_s 
jmp manu_hid 
new_1: jmp new_2 
manu_s: 
win 0,65h,2,1,2,8 
pos_curse 0,2,0 
string manu_2 
win 0,15h,3,1,3,8 
pos_curse 0,3,0 
string manu_3 
red_chr 
cmp al,0dh 
jz save_1 
cmp ah,48h 
je manu_s 
cmp ah,50h 
je manu_a 
jmp manu_hid 
open_1: jmp open_2 
manu_n1: 
jmp manu_n 
manu_a: 
win 0,65h,3,1,3,8 
pos_curse 0,3,0 
string manu_3 
win 0,15h,4,1,4,8 
pos_curse 0,4,0 
string manu_4 
red_chr 
cmp ah,1ch 
jz save_2 
cmp ah,48h 
je manu_a 
cmp ah,50h 
je manu_e 
jmp manu_hid 
manu_n2: 
jmp manu_n1 
new_2: jmp new 
save_1: call save 
save_2: call saveas 
manu_e: 
win 0,65h,4,1,4,8 
pos_curse 0,4,0 
string manu_4 
win 0,15h,5,1,5,8 
pos_curse 0,5,0 
string manu_5 
red_chr 
cmp ah,50h 
je manu_n2 
cmp ah,48h 
je manu_e 
cmp ah,1ch 
je exit 
jmp manu_hid 
exit: 
call backdisplay 
win 0,07h,15,10,17,61 
win 0,24h,14,9,16,60 
mov dh,15 
mov dl,9 
mov bh,0 
mov ah,2 
int 10h 
lea dx,message4 
mov ah,9 
int 21h 
mov ah,1 
int 21h 
cmp al,79h 
jnz q 
call quitt 
q: cmp al,6eh 
jz quit 
quit: win 0,07h,0,0,24,79 
pos_curse 0,0,0 
mov ah,4ch 
int 21h 
ret 
menu_show endp 
new proc near ;新建文件 
pos_get 
push dx 
call backdisplay 
win 0,07h,15,10,17,61 
win 0,24h,14,9,16,60, 
mov dh,15 
mov dl,9 
mov bh,0 
mov ah,2 
int 10h 
lea dx,message1 
cmp al,0dh 
mov ah,9 
int 21h 
mov bx,0 
all: 
mov ah,1 
int 21h 
cmp al,0dh 
je alll 
mov path[bx],al 
inc bx 
jmp all 
alll: 
win 0,3eh,15,9,17,61 
pop dx 
pos_curse 0,dh,dl 
lea dx,path 
mov ah,3ch 
mov cx,00 
int 21h 
mov handle,ax 
mov bx,ax 
mov ah,3eh 
int 21h 
win 0,3eh,1,0,23,79 
mov dh,1 
mov dl,0 
mov bh,0 
mov ah,2 
int 10h 
jmp char_get 
new endp 
open_2: jmp open 
saveas proc near ;另存为文件 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
win 0,3eh,1,0,6,10 
call backdisplay 
win 0,07h,15,10,17,61 
win 0,24h,14,9,16,60, 
mov dh,15 
mov dl,9 
mov bh,0 
mov ah,2 
int 10h 
lea dx,message2 
mov ah,9 
int 21h 
mov bx,0 
bll: 
mov ah,1 
int 21h 
cmp al,0dh 
je blll 
mov path[bx],al 
inc bx 
jmp bll 
blll: 
pos_get 
push dx 
win 0,3eh,1,0,23,79 
call backdisplay 
pop dx 
pos_curse 0,dh,dl 
lea dx,path 
mov ah,3ch 
mov cx,00 
int 21h 
mov handle,ax 
lea dx,buffer 
mov bx,handle 
mov cx,2000 
mov ah,40h 
int 21h 
mov bx,handle 
mov ah,3eh 
int 21h 
call backdisplay 
jmp char_get 
saveas endp 
open proc near ;打开文件 
call backdisplay 
win 0,07h,15,10,17,61 
win 0,24h,14,9,16,60 
mov dh,15 
mov dl,9 
mov bh,0 
mov ah,2 
int 10h 
lea dx,message3 
mov ah,9 
int 21h 
mov bx,0 
cll: 
mov ah,1 
int 21h 
cmp al,13 
je clll 
mov path[bx],al 
inc bx 
jmp cll 
clll: 
win 0,3eh,1,0,23,79 
lea dx,path 
mov ah,3dh 
mov al,0 
int 21h 
mov handle,ax 
lea dx,buffer 
mov bx,handle 
mov cx,2000 
mov ah,3fh 
int 21h 
win 0,3eh,1,23,1,79 
mov dh,1 
mov dl,0 
mov bh,0 
mov ah,2 
int 10h 
mov cx,1000 
sub bx,bx 
replay: 
mov dl,buffer[bx] 
inc bx 
mov ah,2 
int 21h 
loop replay 
mov bx,handle 
mov ah,3eh 
int 21h 
mov dh,1 
mov dl,0 
mov bh,0 
mov ah,2 
int 10h 
mov cx,10 
mov bx,0 
cleapath_3: 
mov bl,0 
mov path[bx],bl 
loop cleapath_3 
jmp char_get 
open endp 
save proc near ;保存文件 
pos_get 
push dx 
win 0,3eh,1,0,6,10 
call backdisplay 
mov ah,path 
cmp ah,21h 
jl j_3 
jmp j_4 
j_3: 
win 0,07h,15,10,17,61 
win 0,24h,14,9,16,60, 
mov dh,15 
mov dl,9 
mov bh,0 
mov ah,2 
int 10h 
lea dx,message2 
mov ah,9 
int 21h 
mov bx,0 
dll: 
mov ah,1 
int 21h 
cmp al,0dh 
je dlll 
mov path[bx],al 
inc bx 
jmp dll 
dlll: 
win 0,3eh,1,0,23,79 
pop dx 
pos_curse 0,dh,dl 
j_4: lea dx,path 
mov ah,3ch 
mov cx,00 
int 21h 
mov handle,ax 
lea dx,buffer 
mov bx,handle 
mov cx,2000 
mov ah,40h 
int 21h 
mov bx,handle 
mov ah,3eh 
int 21h 
call backdisplay 
jmp char_get 
save endp 
savedisplay proc near 
push ax 
push bx 
push cx 
push dx 
push ds 
mov ax,0002h 
int 33h 
mov bx,0d 
mov cx,3840d 
loop1: 
mov ax,0b800h 
mov ds,ax 
mov dl,ds:[bx] 
mov ax,data 
mov ds,ax 
mov bak[bx],dl 
inc bx 
loop loop1 
mov ax,0001h 
int 33h 
pop ds 
pop dx 
pop cx 
pop bx 
pop ax 
savedisplay endp 
backdisplay proc near 
push ax 
push bx 
push cx 
push dx 
push ds 
mov bx,0d 
mov cx,3840d 
loop11: 
mov ax,data 
mov ds,ax 
mov dl,bak[bx] 
mov ax,0b800h 
mov ds,ax 
mov ds:[bx],dl 
inc bx 
loop loop11 
pop ds 
pop dx 
pop cx 
pop bx 
pop ax 
ret 
backdisplay endp 
quitt proc near ;退出 
call backdisplay 
win 0,07h,15,10,17,61 
win 0,24h,14,9,16,60, 
mov dh,15 
mov dl,9 
mov bh,0 
mov ah,2 
int 10h 
lea dx,message2 
mov ah,9 
int 21h 
mov bx,0 
qll: 
mov ah,1 
int 21h 
cmp al,0dh 
je qlll 
mov path[bx],al 
inc bx 
jmp qll 
qlll: 
win 0,07h,15,10,17,61 
win 0,3eh,14,9,16,60 
call backdisplay 
lea dx,path 
mov ah,3ch 
mov cx,00 
int 21h 
mov handle,ax 
lea dx,buffer 
mov bx,handle 
mov cx,2000 
mov ah,40h 
int 21h 
mov bx,handle 
mov ah,3eh 
int 21h 
call backdisplay 
win 0,07h,0,0,24,79 
mov ah,4ch 
int 21h 
ret 
quitt endp 
edit endp 
win3 proc near ;显示日期 
mov ah,2ah 
int 21h 
mov bl,10d 
mov ax,0 
mov al,dh 
div bl 
add ax,3030h 
mov [date+6],al 
mov [date+7],ah 
mov ax,0 
mov al,dl 
div bl 
add ax,3030h 
mov [date+9],al 
mov [date+10],ah 
win 0,1dh,0,67,0,79 
pos_curse 0,0,67 
mov dx,offset date 
mov ah,09h 
int 21h 
ret 
win3 endp 
win4 proc near ;显示行//列 
mov ah,03h 
mov bh,0 
int 10h 
mov bl,100d 
mov bh,10d 
mov ax,0 
mov al,dh 
div bl 
add al,30h 
mov [hanglie+0],al 
mov al,ah 
mov ah,0 
div bh 
add ax,3030h 
mov [hanglie+1],al 
mov [hanglie+2],ah 
mov ax,0 
mov al,dl 
div bl 
add al,30h 
mov [hanglie+5],al 
mov al,ah 
mov ah,0 
div bh 
add ax,3030h 
mov [hanglie+6],al 
mov [hanglie+7],ah 
win 0,1dh,24,60,24,70 
pos_curse 0,24,61 
mov dx,offset hanglie 
mov ah,09h 
int 21h 
ret 
win4 endp 
code ends 
end start ;结束 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -