📄 xiong.asm
字号:
.386
data segment
fn db 'F:\123.txt',0
res db 100 dup(?)
dbuffer db 10 dup(':') ;存放时间
buf db 'game over,the time is:',0ah,0dh,'$'
buf1 db 'do you want go on(Y/N)',0ah,0dh,'$'
buf2 db 'the error is:',0ah,0dh,'$'
buf3 db ' This is a exercise ',0ah,0dh
db ' Do you want to start ',0ah,0dh
db ' $'
buf4 db 'return--R',0ah,0dh
db 'return to dos--D',0ah,0dh,'$'
buf5 db 'You pressed the wrong button,please input it again!',0ah,0dh,'$'
data ends
code segment use16
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov es,ax
d:call clear1 ;清屏
mov ah,02h ;设置光标位置
mov bh,00h
mov dh,07h
mov dl,00h
int 10h
lea dx,buf3 ;输出提示符
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'Y'
jz c
jmp d
c:call clear ;清屏
mov ax,3d00h ;打开文件
lea dx,fn
int 21h
push ax
mov ah,2ch ;读取百分秒
int 21h
pop ax
mov bx,ax ;设置文件指针
push ax
and cx,0
and dh,0
mov ax,4200h
int 21h
mov ah,2ch ;再次读取百分秒
int 21h
pop ax
mov bx,ax ;读取字符串
mov ch,0
mov cl,dl
lea dx,res
mov ah,3fh
int 21h
mov si,ax ;设置结束符
mov res[si],'$'
mov ah,02h ;设置光标位置
mov bh,00h
mov dh,00h
mov dl,00h
int 10h
lea dx,res
mov ah,09h
int 21h
call hui
lea si,res
and cx,0 ;初始时间置零
and dx,0
mov ah,2dh
int 21h
and cl,0 ;错误数量置零
b:mov ah,08h ;输入字符串
int 21h
cmp al,[si]
jz a
inc cl
jmp b
a:call lp ;显示输入
inc si
cmp byte ptr [si],'$'
jnz b
push cx
mov si,0 ;读取时间
mov ah,2ch
int 21h
and ah,0
mov al,cl ;分钟转换
call sub1
and ah,0
mov al,dh ;秒转换
call sub1
and ah,0
mov al,dl ;百分秒转换
call sub1
call hui
lea dx,buf
mov ah,09h
int 21h
lea bp,dbuffer ;显示时间
mov dx,0300h
mov cx,8
mov bx,005fh
mov ax,1301h
int 10h
call hui
lea dx,buf2 ;显示错误数量
mov ah,09h
int 21h
pop cx
mov al,cl ;计算错误数量
cbw
mov bl,10
div bl
mov bh,ah
add al,30h
mov dl,al
mov ah,02h
int 21h
add bh,30h
mov dl,bh
mov ah,02h
int 21h
call hui
lea dx,buf1 ;重新开始
mov ah,09h
int 21h
h:mov ah,01h
int 21h
cmp al,'Y'
jz c
cmp al,'N'
jz e
call hui
lea dx,buf5
mov ah,09h
int 21h
jmp h
e:call hui
lea dx,buf4
mov ah,09h
int 21h
g:mov ah,01h
int 21h
cmp al,'R'
jz d
cmp al,'D'
jz f
call hui
lea dx,buf5
mov ah,09h
int 21h
jmp g
f:mov ah,4ch
int 21h
lp proc
mov dl,al
mov ah,02h
int 21h
ret
lp endp
hui proc ;光标换行子程序
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
ret
hui endp
sub1 proc ;时间asc码转换
mov bl,10
div bl
add al,'0'
mov dbuffer[si],al
inc si
add ah,'0'
mov dbuffer[si],ah
inc si
inc si
ret
sub1 endp
clear proc ;清屏子程序
mov ax,0600h
mov bh,3ah
mov cx,0
mov dx,5050h
int 10h
ret
clear endp
clear1 proc ;清屏子程序
mov ax,0600h
mov bh,8ch
mov cx,0
mov dx,5050h
int 10h
ret
clear1 endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -