📄 liuxu.asm
字号:
crlf macro
mov ah,02h
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
endm
cls macro al1,bh1,ch1,cl1,dh1,dl1
mov ah,06h
mov al,al1
mov bh,bh1
mov ch,ch1
mov cl,cl1
mov dh,dh1
mov dl,dl1
int 10h
endm
setm macro a1,a2
mov bh,0
mov dh,a1
mov dl,a2
mov ah,02h
int 10h
endm
stack segment
db 64 dup(?)
stack ends
data segment
msg db 'press"c"key to cotinue(other key to exit)!','$'
mus_freq dw 659,784,880,1319,1175,1047,988,1047
dw 0,1047,988,880,784,880,659
dw 659,784,880,1319,1175,1047,988,1047
dw 0,1047,988,880,784,880
dw 0,880,1047,988,880,784,880,659,880,784
dw 880,1047,988,1047,988,880,988,1047,1047,1175
dw 4 dup(1319),1175,1047,988,880,988,784
dw 880,880,1047,988,784
mus_time dw 40,40,91,91,3 dup(46),137
dw 91,46,46,182,91,46,319
dw 46,46,91,91,3 dup(46),228
dw 91,46,46,182,182,364,46
dw 137,5 dup(46),273,46,46
dw 137,46,46,23,23,46,46,273,46,46
dw 2 dup(4 dup(46),188)
leng dw $-mus_time
choose db 1
save_si dw 0
save_cx dw 0
save_al db 0
data ends
code segment
main proc far
assume cs:code,ds:data,ss:stack
start:
;set up stack for return
push ds
sub ax,ax
push ax
call move1
call move2
call move3
call move4
call move5
call move6
crlf
mov ah,09h
lea dx,msg
int 21h
mov ah,01h
int 21h
cmp al,'c'
je start
mov ah,4ch
int 21h
main endp
;***************************************************
move1 proc near
start1:
mov ax,data
mov ds,ax
mov al,'1'
mov cl,79
mov ch,0
a1:
push ax
push cx
cls 0,1eh,0,0,24,79
cls 0,0e4h,5,0,15,79
pop cx
pop ax
mov ah,10
mov bl,79
sub bl,cl
setm ah,bl
cmp al,'0'
je t2
t1:
mov dl,'U'
mov ah,02h
int 21h
mov al,'0'
jmp t3
t2:
mov dl,'M'
mov ah,02h
int 21h
mov al,'1'
t3:
mov si,15000
b1:
mov di,12000
c1:
dec di
jnz c1
dec si
jnz b1
call music
loop a1
ret
move1 endp
;****************************************************
move2 proc near
start2:
mov ax,data
mov ds,ax
mov al,'1'
mov cl,79
mov ch,0
g1:
push ax
push cx
cls 0,1eh,0,0,24,79
cls 0,0e4h,5,0,15,79
pop cx
pop ax
mov ah,10
mov bl,0
add bl,cl
sub bl,1
setm ah,bl
cmp al,'0'
je k2
k1:
mov dl,'U'
mov ah,02h
int 21h
mov al,'0'
jmp k3
k2:
mov dl,'M'
mov ah,02h
int 21h
mov al,'1'
k3:
mov si,15000
m1:
mov di,12000
n1:
dec di
jnz n1
dec si
jnz m1
call music
loop g1
ret
move2 endp
;******************************************
move3 proc near
start3:
mov ax,data
mov ds,ax
mov al,'1'
mov cl,79
mov ch,0
a2:
push ax
push cx
cls 0,1eh,0,0,24,79
cls 0,0e4h,5,0,15,79
pop cx
pop ax
mov ah,10
mov bl,79
sub bl,cl
setm ah,bl
cmp al,'0'
je r2
r1:
mov dl,'U'
mov ah,02h
int 21h
mov al,'0'
jmp r3
r2:
mov dl,'M'
mov ah,02h
int 21h
mov al,'1'
r3:
mov si,7500
b2:
mov di,12000
c2:
dec di
jnz c2
dec si
jnz b2
call music
loop a2
ret
move3 endp
;*************************************************
move4 proc near
start4:
mov ax,data
mov ds,ax
mov al,'1'
mov cl,79
mov ch,0
g2:
push ax
push cx
cls 0,1eh,0,0,24,79
cls 0,0e4h,5,0,15,79
pop cx
pop ax
mov ah,10
mov bl,0
add bl,cl
sub bl,1
setm ah,bl
cmp al,'0'
je o2
o1:
mov dl,'U'
mov ah,02h
int 21h
mov al,'0'
jmp o3
o2:
mov dl,'M'
mov ah,02h
int 21h
mov al,'1'
o3:
mov si,7500
m2:
mov di,12000
n2:
dec di
jnz n2
dec si
jnz m2
call music
loop g2
ret
move4 endp
;******************************************
move5 proc near
start5:
mov ax,data
mov ds,ax
mov al,'1'
mov cl,79
mov ch,0
a3:
push ax
push cx
cls 0,1eh,0,0,24,79
cls 0,0e4h,5,0,15,79
pop cx
pop ax
mov ah,10
mov bl,79
sub bl,cl
setm ah,bl
cmp al,'0'
je p2
p1:
mov dl,'U'
mov ah,02h
int 21h
mov al,'0'
jmp p3
p2:
mov dl,'M'
mov ah,02h
int 21h
mov al,'1'
p3:
mov si,3750
b3:
mov di,12000
c3:
dec di
jnz c3
dec si
jnz b3
call music
loop a3
ret
move5 endp
;****************************************************
move6 proc near
start6:
mov ax,data
mov ds,ax
mov al,'1'
mov cl,79
mov ch,0
g3:
push ax
push cx
cls 0,1eh,0,0,24,79
cls 0,0e4h,5,0,15,79
pop cx
pop ax
mov ah,10
mov bl,0
add bl,cl
sub bl,1
setm ah,bl
cmp al,'0'
je z2
z1:
mov dl,'U'
mov ah,02h
int 21h
mov al,'0'
jmp z3
z2:
mov dl,'M'
mov ah,02h
int 21h
mov al,'1'
z3:
mov si,3750
m3:
mov di,12000
n3:
dec di
jnz n3
dec si
jnz m3
call music
loop g3
ret
move6 endp
;******************************************
music proc near
push ax
push bx
push cx
push dx
push si
push di
mov ax,data
mov ds,ax
sti
mov al,choose
cmp al,1
je ring
cmp al,2
je delay_t
cmp al,3
je stop
ring:
mov choose,2
mov si,save_si
mov di,mus_freq[si]
cmp di,0
jz delay_t
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 save_al,al
or al,3
out 61h,al
mov cx,mus_time[si]
mov save_cx,cx
jmp the_end
delay_t:
sub save_cx,8
cmp save_cx,12
ja the_end
mov choose,3
jmp the_end
stop:
mov choose,1
mov al,save_al
out 61h,al
add save_si,2
mov bx,save_si
cmp bx,leng
jb the_end
mov save_si,0
the_end:
cli
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
music endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -