📄 aa.asm
字号:
;屏幕上方的字母随机出现
;第一个方框内的数字表示操作者打字正确的个数(可表示0-999)
;第二个方框内的数字表示在某个等级里所出现字母的个数(可表示0-999)
;第三个方框内的数字表示在所有等级里所出现字母的总个数(可表示0-999)
;按空格键选择打字等级, 即字母下落的速度快慢,分六个等级,其中第一级最快,第六级最慢
;按回车键确定进入游戏
;按ESC键可随时退出,否则,将继续进行
;按BACK键后退一格重新选择等级
data segment
buf db 'abcdefghijklmnopqrstuvwxyz','$'
buf0 db 'level:','$'
buf1 db 'level:1-6','$'
buf2 db 'ENTER:into the game!','$'
buf3 db 'ESC:out of the game!','$'
buf4 db 'SPACE:select the level!','$'
buf5 db 'BACK:reselct the game!','$'
xinghao db '*************','$'
l1 dw ?
l0 dw ?
mus_freq dw 330,294,262,294,3 dup(330),-1
mus_time dw 6 dup(25),50
data ends
stack1 segment para stack
db 100h dup(?)
stack1 ends
code segment
assume cs:code,ds:data,ss:stack1
start:mov ax,data
mov ds,ax
mov ah,0
mov al,02h
int 10h
mov l0,0
yz:mov bp,0
mov l1,0
mov ah,02h
mov bh,0
mov dx,0
jj:int 10h ;清屏
push dx
mov ah,02h
mov dl,0
int 21h
pop dx
inc dl
cmp dl,80
jnz jj
mov dl,0
inc dh
cmp dh,25
jnz jj
mov ah,02h
mov dh,6
mov dl,23
int 10h
mov ah,09h
lea dx,buf2
int 21h
mov ah,02h
mov dh,7
mov dl,23
int 10h
mov ah,09h
lea dx,buf3
int 21h
mov ah,02h
mov dh,8
mov dl,23
int 10h
mov ah,09h
lea dx,buf4
int 21h
mov ah,02h
mov dh,9
mov dl,23
int 10h
mov ah,09h
lea dx,buf5
int 21h
mov ah,02h
mov dh,10
mov dl,29
int 10h
mov ah,09h
lea dx,buf1
int 21h
mov ah,02h
mov dh,12
mov dl,30
int 10h
mov ah,09h
lea dx,buf0
int 21h
fh:mov ah,02h
mov dh,12
mov dl,36
int 10h
mov ah,01h
int 21h
push ax
mov ah,02h
mov bh,0
mov dh,12
mov dl,38
int 10h
mov dl,0
int 21h
int 21h
int 21h
pop ax
cmp al,0dh ;按回车键进入游戏
jz fh
cmp al,1bh ;按ESC键退出游戏
jnz rf
jmp re
rf:and al,000001111b
cmp al,1
jz w1
cmp al,2
jz w2
cmp al,3
jz w3
cmp al,4
jz w4
cmp al,5
jz w5
cmp al,6
jz w6
mov ah,02h
mov dh,12
mov dl,38
int 10h
mov dl,'?'
int 21h
int 21h
int 21h
jmp fh
w1:jmp k1
w2:mov al,5
jmp k1
w3:mov al,15
jmp k1
w4:mov al,30
jmp k1
w5:mov al,50
jmp k1
w6:mov al,90
jmp k1
k1:mov bl,al
over:mov ah,02h
mov bh,0
mov dh,12
mov dl,36
int 10h
mov ah,01h
int 21h
cmp al,08h ;按BACK键后退一格
jnz fd
mov ah,02h
mov bh,0
mov dh,12
mov dl,36
int 10h
mov ah,02h
mov dl,0
int 21h
jmp over
fd:cmp al,0dh ;按回车键进入游戏
jz ov
cmp al,1bh ;按ESC键退出游戏
jnz over
jmp re
ov:mov ah,02h
mov bh,0
mov dh,12
mov dl,36
int 10h
mov ah,02h
mov bh,0
mov dx,0
jj2:int 10h
push dx
mov ah,02h
mov dl,0
int 21h
pop dx
inc dl
cmp dl,80
jnz jj2
mov dl,0
inc dh
cmp dh,25
jnz jj2
mov cx,26
mov dx,0
lp:mov ah,02h
int 10h
inc dh
push dx
mov ah,09h
mov dx,offset xinghao
int 21h
pop dx
loop lp
mov cx,25
mov dx,42h
llp:mov ah,02h
int 10h
inc dh
push dx
mov ah,09h
mov dx,offset xinghao
int 21h
pop dx
loop llp
mov ah,02h
mov dx,0404h
jj0:int 10h
push dx
mov ah,02h
mov dl,0
int 21h
pop dx
inc dl
cmp dl,9
jnz jj0
mov dl,04h
inc dh
cmp dh,7
jnz jj0
mov dx,0505h
int 10h
mov dl,30h
int 21h
int 21h
int 21h
mov ah,02h
mov dx,0b04h
jj3:int 10h
push dx
mov ah,02h
mov dl,0
int 21h
pop dx
inc dl
cmp dl,9
jnz jj3
mov dl,04h
inc dh
cmp dh,0eh
jnz jj3
mov dx,0c05h
int 10h
mov dl,30h
int 21h
int 21h
int 21h
mov ah,02h
mov dx,1204h
jj4:int 10h
push dx
mov ah,02h
mov dl,0
int 21h
pop dx
inc dl
cmp dl,9
jnz jj4
mov dl,04h
inc dh
cmp dh,15h
jnz jj4
mov ah,02h
mov bh,0
mov dx,1305h
int 10h
mov dl,30h
int 21h ;总的计数
mov bh,0
mov dx,1306h
int 10h
mov ax,l0
sc5:mov bh,10
div bh
push ax
cmp al,10
jae dv5
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
jmp xs5
dv5:mov ah,02h
mov dh,013h
mov bh,0
mov dl,07h
int 10h
pop ax
push ax
mov al,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dh,013h
mov dl,05h
int 10h
pop ax
mov ah,0
jmp sc5
xs5:add ah,30h
mov al,ah
mov ah,02h
mov dl,al
int 21h
;以上为界面程序
aa:mov dh,buf ;buf为随机序列
mov bh,buf+4
xchg dh,bh
mov buf,dh
mov buf+4,bh
mov dh,buf+1
mov bh,buf+9
xchg dh,bh
mov buf+1,dh
mov buf+9,bh
mov dh,buf+7
mov bh,buf+14
xchg dh,bh
mov buf+7,dh
mov buf+14,bh
mov dh,buf+12
mov bh,buf+25
xchg dh,bh
mov buf+12,dh
mov buf+25,bh
mov dh,buf+8
mov bh,buf+22
xchg dh,bh
mov buf+8,dh
mov buf+22,bh
mov dh,buf+2
mov bh,buf+6
xchg dh,bh
mov buf+2,dh
mov buf+6,bh
mov dh,buf+13
mov bh,buf+18
xchg dh,bh
mov buf+13,dh
mov buf+18,bh
mov dh,buf+16
mov bh,buf+23
xchg dh,bh
mov buf+16,dh
mov buf+23,bh
mov dh,buf+15
mov bh,buf+11
xchg dh,bh
mov buf+15,dh
mov buf+11,bh
mov dh,buf+5
mov bh,buf+21
xchg dh,bh
mov buf+5,dh
mov buf+21,bh
mov dh,buf+10
mov bh,buf+3
xchg dh,bh
mov buf+10,dh
mov buf+3,bh
mov dh,buf+17
mov bh,buf+19
xchg dh,bh
mov buf+17,dh
mov buf+19,bh
mov dh,buf+20
mov bh,buf+24
xchg dh,bh
mov buf+20,dh
mov buf+24,bh
mov di,0
mov cx,26
mov ah,02h
mov bh,0
mov dx,14
hh:int 10h ;写顶行的26个字母
inc dl
inc dl
push dx
mov ah,02h
mov dl,buf[di]
int 21h
inc di
pop dx
loop hh
mov ah,02h
mov bh,0
mov dx,14
int 10h
push dx
mov di,0
lop:mov ah,02h
mov dl,buf[di]
int 21h
pop dx
int 10h
push dx
mov ah,06h
mov dl,0ffh
int 21h
cmp al,buf[di]
jnz ww
jmp rt
ww:jmp qq
rt:push si
push bp
push di
push bx
lea si,mus_freq
lea bp,mus_time
freq:mov di,[si]
cmp di,-1
jz qs
mov bx,ds:[bp]
call soundf
add si,2
add bp,2
jmp freq
qs:pop bx
pop di
pop bp
pop si
mov ah,02h ;计数
mov dx,0506h
int 10h
inc bp
push bp
mov ax,bp
sc:mov bh,10
div bh
push ax
cmp al,10
jae dv
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
jmp xs
dv:mov ah,02h
mov dh,05h
mov bh,0
mov dl,07h
int 10h
pop ax
push ax
mov al,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dh,05h
mov dl,05h
int 10h
pop ax
mov ah,0
jmp sc
xs:add ah,30h
mov al,ah
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dx,0c06h
int 10h
pop bp
push cx ;等级计数
mov cx,l1
inc cx
mov l1,cx
mov cx,l0
inc cx
mov l0,cx
pop cx
mov ax,l1
sc1:mov bh,10
div bh
push ax
cmp al,10
jae dv1
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
jmp xs1
dv1:mov ah,02h
mov dh,0ch
mov bh,0
mov dl,07h
int 10h
pop ax
push ax
mov al,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dh,0ch
mov dl,05h
int 10h
pop ax
mov ah,0
jmp sc1
xs1:add ah,30h
mov al,ah
mov ah,02h
mov dl,al
int 21h
mov ah,02h ;总的计数
mov bh,0
mov dx,1306h
int 10h
mov ax,l0
sc3:mov bh,10
div bh
push ax
cmp al,10
jae dv3
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
jmp xs3
dv3:mov ah,02h
mov dh,013h
mov bh,0
mov dl,07h
int 10h
pop ax
push ax
mov al,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dh,013h
mov dl,05h
int 10h
pop ax
mov ah,0
jmp sc3
xs3:add ah,30h
mov al,ah
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
pop dx
int 10h
push dx
mov dl,0
int 21h
pop dx
inc di
cmp di,25
ja op
jmp po
op:jmp tt
po:inc dl
inc dl
mov dh,0
int 10h
push dx
jmp lop
qq:cmp al,20h ;按空格键重来
jz pq
cmp al,1bh ;按ESC键退出
jz rr
jmp rc
rr:jmp re
pq:jmp yz
rc:mov ah,2dh
mov cx,0
mov dx,0
int 21h
mov ah,2ch
pp:int 21h ;控制下落速度
cmp dl,bl
jbe pp
pop dx
mov ah,02h
int 10h
push dx
mov dl,0
int 21h
pop dx
inc dh
int 10h
push dx
cmp dh,25
ja ee
jmp lop
ee:mov ah,02h
mov bh,0
mov dx,0c06h
int 10h
push cx ;等级计数
mov cx,l1
inc cx
mov l1,cx
mov cx,l0
inc cx
mov l0,cx
pop cx
mov ax,l1
sc2:mov bh,10
div bh
push ax
cmp al,10
jae dv2
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
jmp xs2
dv2:mov ah,02h
mov dh,0ch
mov bh,0
mov dl,07h
int 10h
pop ax
push ax
mov al,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dh,0ch
mov dl,05h
int 10h
pop ax
mov ah,0
jmp sc2
xs2:add ah,30h
mov al,ah
mov ah,02h
mov dl,al
int 21h
mov ah,02h ;总的计数
mov bh,0
mov dx,1306h
int 10h
mov ax,l0
sc4:mov bh,10
div bh
push ax
cmp al,10
jae dv4
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
jmp xs4
dv4:mov ah,02h
mov dh,013h
mov bh,0
mov dl,07h
int 10h
pop ax
push ax
mov al,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
mov ah,02h
mov bh,0
mov dh,013h
mov dl,05h
int 10h
pop ax
mov ah,0
jmp sc4
xs4:add ah,30h
mov al,ah
mov ah,02h
mov dl,al
int 21h
pop dx
mov ah,02h
mov bh,0
mov dh,0
inc dl
inc dl
int 10h
inc di
cmp di,25
ja tt
push dx
jmp lop
tt:mov ah,02h
mov bh,0
mov dx,14
int 10h
push dx
mov di,25 ;翻转序列
mov si,0
mov cx,13
kp:mov dh,buf[di]
mov dl,buf[si]
xchg dh,dl
mov buf[di],dh
mov buf[si],dl
dec di
inc si
loop kp
jmp aa
re:mov ah,02h
mov bh,0
mov dx,0
jj1:int 10h ;清屏
push dx
mov ah,02h
mov dl,0
int 21h
pop dx
inc dl
cmp dl,80
jnz jj1
mov dl,0
inc dh
cmp dh,25
jnz jj1
mov dx,0
int 10h
mov ah,4ch
int 21h
soundf proc
push ax
push bx
push cx
push dx
push di
mov al,0b6h
out 43h,al
mov dx,12h
mov ax,348ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
wait1:mov cx,633
call waitf
delay:loop delay
dec bx
jnz wait1
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp
waitf proc
push ax
waitf1:in al,61h
and al,10h
cmp al,ah
jz waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -