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

📄 music1.asm

📁 这是我在很多网站上辛苦搜集的所有有关计算机钢琴的程序以及大量报告
💻 ASM
字号:
;music.asm
;wujian 1.25 2007
;**************************数据段*************************
DATA SEGMENT 
INFO1 DB 0DH,0AH,'***************************$' 
INFO2 DB 0DH,0AH,'welcome !!$' 
INFO4 DB 0DH,0AH,'INPUT ERROR!$' 
INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$' 
MUSLIST DB 0DH,0AH,'The  menu : '
        DB 0DH,0AH,'1 MUSIC1-----------two tigers' 
        DB 0DH,0AH,'Q EXIT-------------exit' 
        db 0dh,0ah,'$' 
;*******************音乐 
MUS_FREG1 dw 2 dup(262,294,330,262) 
          dw 2 dup(330,349,392)
          dw 2 dup(392,440,392,394,330,262)
          dw 2 dup(294,196,262),-1 
MUS_TIME1 dw 2 dup(25,25,25,25) 
          dw 2 dup(25,25,50) 
          dw 2 dup(12,12,12,12,25,25)
          dw 2 dup(25,25,50)
DATA ENDS
;*****************************堆栈段************************************** 
STACK SEGMENT 
DB 200 DUP('STACK……') 
STACK ENDS 
;*****************************代码段*************************************
CODE SEGMENT 
ASSUME DS:DATA,SS:STACK,CS:CODE 
START: 
MOV AX,DATA 
MOV DS,AX 
MOV aH, 0 
MOV AL,00 
INT 10H 
;********** 用来调用显示字符串的宏
SHOW MACRO b 
LEA DX,b 
MOV AH,9 
INT 21H 
ENDM 
;**********************音乐地址宏 
ADDRESS MACRO A,B 
LEA SI,A 
LEA BP,DS:B 
ENDM 
;*********************** 
show INFO1 
show INFO2 

show MUSLIST 
INPUT: MOV AH,01H ;输入1和Q来选择开始和退出
INT 21H 
CMP AL,'Q' 
JZ retu 
CMP AL,'1' 
JNZ B0 
ADDRESS MUS_FREG1,MUS_TIME1 
CALL MUSIC 
JMP EXIT1 
B0: CMP AL,'2' 
JNZ C0 
CALL MUSIC 
JMP EXIT1 
C0: CMP AL,'3' 
JNZ exit 
CALL MUSIC 
EXIT1: show INFO5 
JMP INPUT 
EXIT:  
show INFO4 
show INFO5 
show INFO1 
show INFO2 
show MUSLIST 
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	;分两次把ax里
MOV AL,AH	 ;面的内容
OUT 42H,AL	 ;输到端口42H
IN AL,61H   ;把端口61H的内容送到AL
MOV AH,AL 	;保存端口61H的初始内容
OR AL,3 	;
OUT 61H,AL  ;turn on the speaker
WAIT1: ;时间延迟
MOV CX,5000
call waitf 
DELAY1: DEC BX 
JNZ WAIT1 
MOV AL,AH  ;
OUT 61H,AL ;turn off the speaker
POP DI 
POP DX 
POP CX 
POP BX 
POP AX 
RET 
GENSOUND ENDP 
;******************************************** 
waitf proc near 
	push ax 
waitf1: 
in al,61h ;p391
and al,10h 
cmp al,ah 
je waitf1 
mov ah,al 
loop waitf1 
pop ax 
ret 
waitf endp 

;********************************************* 
MUSIC PROC NEAR 
PUSH DS 
SUB AX,AX 
PUSH AX 
FREG: MOV DI,[SI];将SI指向的内容传给DI 
CMP DI,-1 ;判断是否到了到了最后
JE END_MUS 
MOV BX,DS:[BP] 
CALL GENSOUND 
ADD SI,2 
ADD BP,2 
JMP FREG 
END_MUS: 
RET 
MUSIC ENDP 
CODE ENDS 
END START

⌨️ 快捷键说明

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