汇编语言中如何实现程序自动播放一段音乐

汇编语言中如何实现程序自动播放一段音乐,第1张

你好,

你可以把音乐文件放在跟执行程序同一个目录下,然后通过程序的

__启动窗口_创建完毕

下写入这些代码

播放MP3 (播放次数.整数型, “MP3文件路径.文本型”)

路径可以用 取运行目录()+"\MP3文件.mp3"

希望能够帮助到你

你的程序最后缺少:

code ends

    end start

===================================

DATA SEGMENT PARA 'DATA'

MUSIC_F DW 440,392,330,392,524,440,392,440

    DW 330,392,440,392,330, 262,220,392,330,294

    DW 294,330,392,392,440,330,294,262

    DW 392,330,294,262,220,262,196,0

MUSIC_T DW 32000,16000,32000,32000,32000,16000,16000,32000

    DW 32000,16000,16000,32000,32000,16000,16000,16000,16000, 32000

    DW 32000,16000,32000,16000,16000,32000,32000,32000

    DW 32000,16000,16000,16000,16000,32000

DATA ENDS CODE SEGMENT PARA 'CODE'

    ASSUME CS:CODE,DS:DATA

START1 PROC FAR

start:

    PUSH DS

    SUB AX,AX

    PUSH AX

    MOV AX,DATA

    MOV DS,AX

    LEA SI,MUSIC_F

NEXT: LEA BP,MUSIC_T

START2: MOV DI,[SI]

    CMP DI,0

    JE EXIT

    MOV BX,DS:[BP]

    MOV AL,0B6H 向 8253 计数器 2 写控制字(主板规定)

    OUT 43H,AL 方式 3、双字节写和二进制计数方式写到控制口

    MOV DX,12H 设置被除数

    MOV AX,3208H 其商(AX)为预置值

    DIV DI

    OUT 42H,AL 先送低位数据

    MOV AL,AH

    OUT 42H,AL 再送高位数据

    IN AL,61H 读 8255 端口 B(61H)原值

    MOV AH,AL

    OR AL,03H

    OUT 61H,AL 使与门打开,GETE2 有效,扬声器响

WAIT1:MOV CX,2801H

DELAY:LOOP DELAY 时间延迟次数为 2801H 次

    DEC BX 循环持续 BX 次

    JNZ WAIT1

    MOV AL,AH 写回 61H 口原值,关闭扬声器

    OUT 61H,AL

    ADD SI,2

    ADD BP,2

    JMP START2

EXIT: MOV AL,48H

    OUT 61H,AL

    RET

START1 ENDP

code ends

      end start

这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽有只小羔羊”;

按大写字母“B”,唱乐曲“太湖船”

按大写字母“C”,唱乐曲“祝福歌”

按"X"键,退出

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,'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*8),50*8

DW 2 DUP (25*8,25*8,50*8)

DW 12 DUP (25*8),100*8

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 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

MUSIC1PROC NEAR

PUSH DS

SUB AX,AX

PUSH AX

LEA SI,MUS_FREG1

LEA BP,DS:MUS_TIME1

FREG1: 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 FREG1

END_MUS1:

RET

MUSIC1ENDP

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

MUSIC2PROC NEAR

PUSH DS

SUB AX,AX

PUSH AX

LEA SI,MUS_FREG2

LEA BP,DS:MUS_TIME2

FREG2: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 FREG1

END_MUS2:

RET

MUSIC2ENDP

MUSIC3PROC NEAR

PUSH DS

SUB AX,AX

PUSH AX

LEA SI,MUS_FREG3

LEA BP,DS:MUS_TIME3

FREG3: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 FREG1

END_MUS3:

RET

MUSIC3ENDP

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8073949.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存