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

📄 music.asm

📁 汇编程序
💻 ASM
字号:
;FILENAME:
;内容:PC扬声器音乐演奏
DATA 	SEGMENT PARA 'DATA'
INFO1 	DB 0DH,0AH,'WELCOME YOU TO COME HERE!$'
INFO2 	DB 0DH,0AH,'this is a music program!$'
INFO3 	DB 0DH,0AH,'please select!$'
INFO4 	DB 0DH,0AH,'INPUT ERROR!$'
INFO5 	DB 0DH,0AH,'PLEASE INPUT AGAIN!$'
MUSLIST   DB 0DH,0AH,'===================='
  	DB 0DH,0AH,'| A MUSIC1         |'        
      	DB 0DH,0AH,'| B MUSIC2         |'
       	DB 0DH,0AH,'| C MUSIC3         |'
       	DB 0DH,0AH,'| Q EXIT           |'
  	DB 0DH,0AH,'===================='
      	DB 0DH,0AH,0DH,0AH,'$'
MUS_FREQ1 DW 330,294,262,294,3 DUP (330)
     	DW 3 DUP (294),330,392,392
     	DW 330,294,262,294,4 DUP (330)
      	DW 294,294,330,294,262,-1
MUS_TIME1 DW 6 DUP (25*8),50*8
      	DW 2 DUP (25*8,25*8,50*8)
      	DW 12 DUP (25*8),100*8

MUS_FREQ2 DW 330,392,330,294,330,392,330,294,330
      	DW 330,392,330,294,262,294,330,392,294
      	DW 262,262,220,196,196,220,262,294,332,262,-1
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100
       	DW 2 DUP(50,50,25,25),100
      	DW 3 DUP(50,25,25),100

MUS_FREQ3 DW 262,262,294,262,349
      	DW 330,262,262,294,262
       	DW 392,349,262,262,523
      	DW 440,349,262,262,466
      	DW 466,440,262,392,349,-1
        
MUS_TIME3 DW 50,50,100,100,100
      	DW 100,100,50,50,100,100
     	DW 100,100,100,50,50,100
      	DW 100,100,100,100,100,50
      	DW 50,100,100,100,100,100
DATA  	ENDS

STACK 	SEGMENT PARA STACK 'STACK'
      	DB 200 DUP ('STACK')
STACK 	ENDS

CODE  	SEGMENT
       	ASSUME DS:DATA,SS:STACK,CS:CODE
MAIN  	PROC FAR
      	MOV AX,DATA
       	MOV DS,AX
      	MOV aH, 0
      	MOV AL,4
      	INT 10H
      	MOV AH,0BH
       	MOV BH,0
      	MOV BL,4
       	INT 10H
      	MOV AH,0BH
      	MOV BH,01H
      	MOV BL,00
      	INT 10H
;*****定义一个宏*****
SHOW  	MACRO b
      	LEA DX,b
      	MOV AH,9
      	INT 21H
      	ENDM
;**********************
      	show INFO1
     	show INFO2
     	show INFO3
      	show MUSLIST
INPUT:	MOV AH,01H
     	INT 21H
      	CMP AL,'Q'
      	JZ retu
      	CMP AL,'A'
      	JNZ B0
       	CALL MUSIC1
      	JMP EXIT1
B0:   	CMP AL,'B'
      	JNZ C0
      	CALL MUSIC2
      	JMP EXIT1
C0:  	CMP AL,'C'
      	JNZ exit
      	CALL MUSIC3
EXIT1:	show INFO5
      	JMP INPUT 
EXIT:     
     	call clear
      	show INFO4
     	show INFO5
     	show INFO1
     	show INFO2
     	show INFO3
    	show MUSLIST
    	jmp input
RETU: 	MOV AH,4CH
       	INT 21H
MAIN 	ENDP 

MUSIC1	PROC NEAR
      	PUSH DS
     	SUB AX,AX
    	PUSH AX
    	LEA SI,MUS_FREQ1
    	LEA BP,DS:MUS_TIME1
FREQ1:	MOV DI,[SI]
      	CMP DI,-1
      	JE END_MUS1
      	MOV DX,DS:[BP]
     	MOV BX,1400
      	CALL GENSOUND
      	ADD SI,2
      	ADD BP,2
     	JMP FREQ1
END_MUS1:
      	RET
MUSIC1	ENDP

GENSOUND PROC NEAR
      	PUSH AX
     	PUSH BX
      	PUSH CX
       	PUSH DX
    	PUSH DI
      	MOV AL,0B6H
      	OUT 43H,AL
      	MOV DX,12H
      	MOV AX,533H*896
      	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,8FF0H
DELAY1:
		LOOP DELAY1
   		DEC BX
  		JNZ WAIT1
   		MOV AL,AH
  		OUT 61H,AL
  		POP DI
      	POP DX
    	POP CX
      	POP BX
     	POP AX
    	RET
GENSOUND ENDP

MUSIC2	PROC NEAR
     	PUSH DS
    	SUB AX,AX
      	PUSH AX
      	LEA SI,MUS_FREQ2
      	LEA BP,DS:MUS_TIME2
FREQ2:	MOV DI,[SI]
      	CMP DI,-1
      	JE END_MUS2
      	MOV DX,DS:[BP]
      	MOV BX,1400
       	CALL GENSOUND
       	ADD SI,2
      	ADD BP,2
      	JMP FREQ1
END_MUS2:
       	RET
MUSIC2	ENDP
MUSIC3	PROC NEAR
      	PUSH DS
     	SUB AX,AX
      	PUSH AX
     	LEA SI,MUS_FREQ3
       	LEA BP,DS:MUS_TIME3
FREQ3:	MOV DI,[SI]
    	CMP DI,-1
     	JE END_MUS3
     	MOV DX,DS:[BP]
      	MOV BX,1400
      	CALL GENSOUND
     	ADD SI,2
    	ADD BP,2
     	JMP FREQ1
END_MUS3:
       	RET
MUSIC3	ENDP
CLEAR 	PROC NEAR
      	PUSH AX
      	PUSH BX
      	PUSH CX
      	PUSH DX
      	MOV  AH,6
      	MOV AL,0
      	MOV CH,0
      	MOV CL,0
      	MOV DH,24
      	MOV DL,79
      	MOV BH,7
      	INT 10H
      	POP DX
      	POP CX
      	POP BX
      	POP AX
      	RET
CLEAR 	ENDP
CODE  	ENDS
      	END MAIN

⌨️ 快捷键说明

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