📄 s_2.asm
字号:
code segment
assume cs:code
oldint8 dd ?
oldint9 dd ?
time dw 0
ascii db 10H,11H,12H,13H,14H,15H,16H
db 1EH,1FH,20H,21H,22H,23H,24H
db 2CH,2DH,2EH,2FH,30H,31H,32H
db 4FH,50H,51H,4BH,4CH,4DH,47H
music dw 131,147,165,175,196,220,247
dw 262,294,330,349,392,440,494
dw 523,587,659,698,784,880,988
dw 1046,1175,1318,1397,1568,1760,1975
newint8:
dec cs:word ptr time
jz closev
new8_0:
jmp cs:oldint8
closev:
push ax
in al,61h
and al,0fdh
out 61h,al
pop ax
jmp new8_0
voice:
mov cx,ax
mov dx,12h
mov ax,34dch
div cx
push ax
mov al,0b6h
out 43h,al
pop ax
out 42h,al
mov al,ah
out 42h,al
in al,61h
or al,03h
out 61h,al
ret
newint9:
in al,60h
push ax
in al,61h
or al,80h
out 61h,al
and al,7fh
out 61h,al
mov al,20h
out 20h,al
sti
pop ax
push ax
cmp al,80h
jb new90
mov cs:word ptr time,04h
jmp quit
new90:
push cs
pop es
mov di,offset ascii
mov cx,2ddh
cld
repnz scasb
jcxz quit
sub di,offset ascii
dec di
shl di,1
mov ax,es:[di+music]
mov cs:word ptr time,0h
call voice
quit:
pop ax
cmp al,01h
jnz menu
lds dx,cs:oldint8
mov ax,2508h
int 21h
lds dx,cs:oldint9
mov ax,2509h
int 21h
mov ax,4c00h
int 21h
menu:
sti
jmp menu
start:
mov ax,cs
mov ds,ax
mov ax,3508h
int 21h
mov cs:word ptr oldint8,bx
mov cs:word ptr oldint8+2,es
mov ax,3509h
int 21h
mov cs:word ptr oldint9,bx
mov cs:word ptr oldint9+2,es
mov ax,2508h
mov dx,offset newint8
int 21h
mov ax,2509h
mov dx,offset newint9
int 21h
jmp menu
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -