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

📄 melody.asm

📁 汇编语言实现用系统硬件发声。编写的音律发声小软件
💻 ASM
字号:
.MODEL SMALL
.STACK 200H
.DATA
    MESS1 DB 0DH,0AH,'      ---------------------------',0DH,0AH,'$'
    MESS2 DB 0DH,0AH,'      --Play Melody by Hardware--',0DH,0AH,'$'
    MESS3 DB 0DH,0AH,'      -------------by Edison-----$'
    MESS4 DB 0DH,0AH,'$'
    MESS5 DB 0DH,0AH,'      Using the assembly language!',0DH,0AH,'$'
    MESS6 DB 0DH,0AH,'      List of melody:$'
    MESS7 DB 0DH,0AH,'      ---------------------------$'
    MESS8 DB 0DH,0AH,'      --WARNING : INPUT ERROR !--',0DH,0AH,'      ---------------------------$'                
    MESS9 DB 0DH,0AH,'      --Just "A,B,C,Q" Allowed!--',0DH,0AH,'      ---Please select again !---$'
    MESS0 DB 0DH,0AH,'      ---------------------------',0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,'$'
    MELODYLIST DB 0DH,0AH,'      A : MELODY1' 
               DB 0DH,0AH,'      B : MELODY2' 
               DB 0DH,0AH,'      C : MELODY3' 
               DB 0DH,0AH,'      Q : EXIT' 
               DB 0DH,0AH,'      Your choose(A,B,C,Q):$'

;*********************** 音乐一 ***********************
    Melody_FREQUENCY1 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 
    Melody_TIME1 DW 6 DUP (25),50 
                      DW 2 DUP (25,25,50) 
                      DW 12 DUP (25),100 

;*********************** 音乐二 *********************** 
    Melody_FREQUENCY2 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
    Melody_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 

;*********************** 音乐三 ***********************
    Melody_FREQUENCY3 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
    Melody_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 


.CODE
START:
    MOV AX,@DATA 
    MOV DS,AX 
    MOV aH, 0 
    MOV AL,00 
    INT 10H 

;*********************** VIEW *********************** 
    VIEW MACRO b 
    LEA DX,b 
    MOV AH,9 
    INT 21H 
    ENDM 

;*********************** ADDRESS ***********************
    ADDRESS MACRO A,B 
    LEA SI,A 
    LEA BP,DS:B 
    ENDM 

;********************************************** 
    VIEW MESS1 
    VIEW MESS2 
    VIEW MESS3
    VIEW MESS4
    VIEW MESS5
    VIEW MESS6 
    VIEW MELODYLIST 
INPUT: 
    MOV AH,01H 
    INT 21H 
    CMP AL,'Q' 
    JZ retu

    CMP AL,'q' 
    JZ retu
 
    CMP AL,'A' 
    JNZ B0 
    ADDRESS Melody_FREQUENCY1,Melody_TIME1 
    CALL MELODY 
    JMP EXIT1

B0: 
    CMP AL,'a' 
    JNZ C0 
    ADDRESS Melody_FREQUENCY1,Melody_TIME1 
    CALL MELODY 
    JMP EXIT1
 
C0: 
    CMP AL,'B' 
    JNZ D0 
    ADDRESS Melody_FREQUENCY2,Melody_TIME2 
    CALL MELODY 
    JMP EXIT1

D0: 
    CMP AL,'b' 
    JNZ E0 
    ADDRESS Melody_FREQUENCY2,Melody_TIME2 
    CALL MELODY 
    JMP EXIT1

E0: 
    CMP AL,'C' 
    JNZ F0 
    ADDRESS Melody_FREQUENCY2,Melody_TIME2 
    CALL MELODY 
    JMP EXIT1
 
F0: 
    CMP AL,'c' 
    JNZ exit 
    ADDRESS Melody_FREQUENCY3,Melody_TIME3 
    CALL MELODY
 
EXIT1: 
    JMP INPUT
 
EXIT: 
    call ERROR 
    VIEW MESS7 
    VIEW MESS8
    VIEW MESS9
    VIEW MESS0
    VIEW MESS1 
    VIEW MESS2 
    VIEW MESS3
    VIEW MESS4
    VIEW MESS5
    VIEW MESS6 
    VIEW MELODYLIST 
    jmp input 
    
RETU: 
    MOV AH,4CH 
    INT 21H 

;*********************** 发声 *********************** 
    GENSOUND PROC NEAR 
    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,3314 
    call waitf 
    DELAY1: DEC BX 
    JNZ WAIT1 
    MOV AL,AH 
    OUT 61H,AL 
    POP DI 
    POP DX 
    POP CX 
    POP BX 
    POP AX 
    RET 
	GENSOUND ENDP
 
;********************************************** 
	WAITF PROC NEAR 
	PUSH AX 
WAITF1: 
	IN AL,61H
	AND AL,10H 
	CMP AL,AH 
	JE WAITF1 
	MOV AH,AL 
	LOOP WAITF1 
	POP AX 
	RET 
	WAITF ENDP 

;********************************************** 
	MELODY PROC NEAR 
	PUSH DS 
	SUB AX,AX 
	PUSH AX 
FREQUENCY: 
	MOV DI,[SI] 
	CMP DI,-1 
	JE END_MELODY 
	MOV BX,DS:[BP] 
	CALL GENSOUND 
	ADD SI,2 
	ADD BP,2 
	JMP FREQUENCY 
END_MELODY: 
	RET 
	MELODY ENDP 

;*********************** ERROR ***********************
	ERROR 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 
	ERROR endp 
END START

⌨️ 快捷键说明

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