音乐演奏程序

lxqfeng 2009-06-03 11:15:41
DATA SEGMENT
FREQ DW 2 DUP(0106H,0126H,014AH,0106H),2 DUP(014AH,015DH,0188H),2 DUP(0188H,01B8H,0188H,015DH,014AH,0106H),2 DUP(0126H,00C4H,0106H)
DW 0H
LONG DW 8 DUP(04E2H),2 DUP(04E2H,04E2H,09C4H),2 DUP(0271H,0271H,0271H,0271H,04E2H,04E2H),2 DUP(04E2H,04E2H,09C4H),0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DI,FREQ
LEA SI,LONG
READDATA:
MOV BX , [DI]
CMP BX , 0H
JZ EXIT
MOV AL , 0B6H
OUT 43H, AL
MOV DX , 12H
MOV AX , 34DCH
DIV BX
OUT 42H, AL
MOV AL , AH
OUT 42H, AL
MOV BX , [SI]
IN AL , 61H
MOV AH , AL
OR AL , 3
OUT 61H, AL
LENG:
MOV CX , 65535
DELAY:
LOOP DELAY
DEC BX
JNZ LENG
MOV AL , AH
OUT 61H, AL
ADD DI , 2
ADD SI , 2
JMP READDATA
EXIT:
RET
START ENDP
CODE ENDS
END START
...全文
181 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxqfeng 2009-06-09
  • 打赏
  • 举报
回复
谢谢了,今天在学校机房运行的时候有声音。程序没什么问题。。
hunt2088 2009-06-07
  • 打赏
  • 举报
回复
顶 !
dididu1515 2009-06-07
  • 打赏
  • 举报
回复
七楼的程序中,clear proc near 子程序多余,精简后的代码对按键判断可不分大小写。
精简后的代码请参阅:"音乐演奏程序,刚刚做的"之精简版
http://tieba.baidu.com/f?kz=589840904
BAYNPU 2009-06-05
  • 打赏
  • 举报
回复
说不定你的电脑上的主板没有安装speaker,要不然老是没有发出声音,噢还一点就是操作系统WINXP和vista运行此程序可能存在一定差异.
lxqfeng 2009-06-04
  • 打赏
  • 举报
回复
大小写注意了的
lxqfeng 2009-06-04
  • 打赏
  • 举报
回复
运行的时候可以选择,就是听不到声音了,运行了的
BAYNPU 2009-06-04
  • 打赏
  • 举报
回复
还分大小写,在WINXP上可以演奏三部曲。
jinhx 2009-06-04
  • 打赏
  • 举报
回复
选择的时候要输入大写
BAYNPU 2009-06-04
  • 打赏
  • 举报
回复
程序显示的菜单都无法选择,还会发出声音吗?
lxqfeng 2009-06-04
  • 打赏
  • 举报
回复
就是这个程序,在好多电脑上运行了的,都听不到声音?麻烦各位大侠看看,谢谢了

DATA SEGMENT
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,'A MUSIC1'
DB 0DH,0AH,'B MUSIC2'
DB 0DH,0AH,'C MUSIC3'
DB 0DH,0AH,'Q EXIT'
DB 0dh,0ah,'$'
;音乐一*********************************************************
MUS_FREG1 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),50
DW 2 DUP (25,25,50)
DW 12 DUP (25),100
;*********************************************************音乐二
MUS_FREG2 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_FREG3 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 STACK
DB 200 DUP (0)
STACK ENDS

CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX

;*****定义一个宏*****
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 INFO3
show MUSLIST
INPUT: MOV AH,01H
INT 21H
CMP AL,'Q'
JZ RETU
CMP AL,'A'
JNZ B0
ADDRESS MUS_FREG1, MUS_TIME1

CALL MUSIC
JMP EXIT1
B0: CMP AL,'B'
JNZ C0
ADDRESS MUS_FREG2,MUS_TIME2

CALL MUSIC
JMP EXIT1
C0: CMP AL,'C'
JNZ exit
ADDRESS MUS_FREG3,MUS_TIME3

CALL MUSIC
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
;******************************************发声
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,2800
CALL WAITF
DELAY: LOOP DELAY
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
;*********************************************
MUSIC PROC NEAR
PUSH DI
PUSH SI
PUSH AX
PUSH BX
SUB AX,AX
FREG: MOV DI,[SI]
CMP DI,-1
JE END_MUS
MOV BX,DS:[BP]
CALL GENSOUND
ADD SI,2
ADD BP,2
JMP FREG
END_MUS: POP BX
POP AX
POP SI
POP DI
RET
MUSIC ENDP
;************************************************clear!!!
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 START
BAYNPU 2009-06-04
  • 打赏
  • 举报
回复
在winxp上运行有声音,如果不行切换到实地址方式试一试。
lxqfeng 2009-06-04
  • 打赏
  • 举报
回复
不好意思的,我运行的时候怎么就没声音的?
BAYNPU 2009-06-03
  • 打赏
  • 举报
回复
发出声音:两只老虎,两只老虎...。
BAYNPU 2009-06-03
  • 打赏
  • 举报
回复
DATA SEGMENT
FREQ DW 2 DUP(0106H,0126H,014AH,0106H),2 DUP(014AH,015DH,0188H),2 DUP(0188H,01B8H,0188H,015DH,014AH,0106H),2 DUP(0126H,00C4H,0106H)
LONG DW 8 DUP(04E2H),2 DUP(04E2H,04E2H,09C4H),2 DUP(0271H,0271H,0271H,0271H,04E2H,04E2H),2 DUP(04E2H,04E2H,09C4H),0
INFOR DB "PRESS ANY KEY TO EXIT...$"
DATA ENDS
WRITES MACRO A1
LEA DX,A1
MOV AH,09H
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET FREQ
MOV DI,OFFSET LONG
WRITES INFOR
L1: MOV CX,[SI]
CMP CX,-1
JE EXIT
MOV BX,[DI]
CALL GENSOUND
ADD SI,2
ADD DI,2
MOV AH,0BH ;按任意键结束
INT 21H
CMP AL,00H
JNZ EXIT
JMP L1
EXIT: MOV AH,4CH
INT 21H
MAIN ENDP

GENSOUND PROC NEAR
PUSH DX
MOV AL,0B6H
OUT 43H,AL
MOV DX,08H
MOV AX,3208H
DIV CX
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
L2: PUSH DX
PUSH AX
MOV DX,8H
MOV AX,0F05H
S1: SUB AX,1
SBB DX,0
JNZ S1
POP AX
POP DX
DEC BX
JNZ L2
MOV AL,AH
OUT 61H,AL
POP DX
RET
GENSOUND ENDP
CODE ENDS
END START


hz_yck 2009-06-03
  • 打赏
  • 举报
回复
能发声啊,你把循环改长点试试
lxqfeng 2009-06-03
  • 打赏
  • 举报
回复
帮忙把这个程序修改一下,让其能够发出声音。谢谢了。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧