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

📄 点歌系统.asm

📁 有5首歌曲供选择
💻 ASM
字号:
DATAS SEGMENT
SRING1    DB 0DH,0AH,'CHOOSE THE MUSIC!$'
SRING2    DB 0DH,0AH,'INPUT ERROR!$'
SRING3    DB 0DH,0AH,'PLEASE INPUT AGAIN!$'
MUSLIST   DB 0DH,0AH,'1 MUSIC1'
          DB 0DH,0AH,'2 MUSIC2'
          DB 0DH,0AH,'3 MUSIC3'
          DB 0DH,0AH,'4 MUSIC4'
          DB 0DH,0AH,'5 MUSIC5'
          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,294,330,262,394,330
          DW 330,294,262,349,330,330,294,262
          DW 330,394,392,330,440,392
          DW 392,349,330,440,392,392,349,330
          DW 6 DUP(262)
          DW -1
MUS_TIME3 DW 3 DUP(50,25),3 DUP(25),50,4 DUP(25)
          DW 3 DUP(50,25),3 DUP(25),50,4 DUP(25)
          DW 100,100,100,100,100,100
         
MUS_FREG4 DW 330,292,330,394,330,392,330,294,330
          DW 330,292,330,394,262,294,330,392,294
          DW 262,262,220,196,196,220,262,294,330,262
          DW -1
MUS_TIME4 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_FREG5 DW 330,390,440,294,262,220
          DW 390,131,440,392,330
          DW 330,390,440,294,262,220
          DW 261,294,390,261,220
          DW -1
MUS_TIME5 DW 2 DUP(25),50,25,25,50
          DW 4 DUP(25),100
          DW 2 DUP(25),50,25,25,50
          DW 4 DUP(25),100
DATAS ENDS

STACKS SEGMENT
    DB 100 DUP ('STACK')
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN      PROC FAR
          MOV AX,DATAS
          MOV DS,AX
          MOV AH,00H  ;设置显示方式
          MOV AL,12H
          INT 10H
          MOV AH,0BH  ;设置设置背景颜色
          MOV BH,0
          MOV BL,41H  
          INT 10H
         
SHOW      MACRO s     ;定义一个执行语句的宏
          LEA DX,s
          MOV AH,9
          INT 21H
          ENDM

HUICHE    MACRO      ;定义一个回车换行的宏
          MOV DL,0DH
          MOV AH,02H
          INT 21H
          MOV DL,0AH
          MOV AH,02H
          INT 21H
          ENDM
          
          SHOW SRING1   ; 调用SHOW显示语句
          HUICHE
          SHOW MUSLIST

INPUT:    MOV AH,01H  ;判断输入的字母再进行歌曲的播放
          INT 21H
          CMP AL,'Q'  ;输入大写Q退出程序
          JNZ NEXT
          JMP ESC1
MONE:     CMP AL,'1'  ;输入1播放MUSIC1
          JNZ MTOW
          CALL MUSIC1
          JMP EXIT1
MTOW:     CMP AL,'2'   ;输入2播放MUSIC2
          JNZ MTHREE
          CALL MUSIC2
          JMP EXIT1
MTHREE:   CMP AL,'3'   ;输入3播放MUSIC3
          JNZ MFOUR     ;输入不正确时要求重新输入
          CALL MUSIC3
          JMP EXIT1
MFOUR:    CMP AL,'4'   ;输入4播放MUSIC4
          JNZ MFIVE     ;输入不正确时要求重新输入
          CALL MUSIC4
          JMP EXIT1
MFIVE:    CMP AL,'5'   ;输入5播放MUSIC5
          JNZ EXIT     ;输入不正确时要求重新输入
          CALL MUSIC5
EXIT1:    SHOW SRING3  ;重新输入
          JMP INPUT 
;*****重新显示列表*****         
EXIT:     
          HUICHE
          SHOW SRING2
          HUICHE
          SHOW SRING3
          HUICHE
          SHOW SRING1
          SHOW MUSLIST
          JMP INPUT   ;重新调用input进行重新输入操作
;***************************
NEXT:     CMP AL,'q'  ;输入小写Q退出程序
          JNZ MONE
ESC1:     MOV AH,4CH  ;返回DOS
          INT 21H
MAIN ENDP 
;********发声程序************
SOUNDF PROC FAR
          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
          
WAITL:   MOV CX,663H  ;时间延迟设定
          CALL WAITF

DELAY:    LOOP DELAY
          DEC BX
          JNZ WAITL
          MOV AL,AH
          OUT 61H,AL
          POP DI
          POP DX
          POP CX
          POP BX
          POP AX
          RET
SOUNDF 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
;***************************
MUSIC1    PROC NEAR
          PUSH DS
          SUB AX,AX
          PUSH AX
          LEA SI,MUS_FREG1;把频率表的地址放在SI
          LEA BP,DS:MUS_TIME1;把时间表的地址放在DI
FREG1:     MOV DI,[SI] ;读下一个频率
          CMP DI,-1;遇到-1就结束
          JE END_MUS1
          MOV DX,DS:[BP];读下时间表
          CALL SOUNDF
          ADD SI,2
          ADD BP,2
          JMP FREG1
END_MUS1:
          RET
MUSIC1    ENDP

MUSIC2    PROC 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]
          CALL SOUNDF
          ADD SI,2
          ADD BP,2
          JMP FREG1
END_MUS2:
          RET
MUSIC2    ENDP

MUSIC3    PROC 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]
          CALL SOUNDF
          ADD SI,2
          ADD BP,2
          JMP FREG1
END_MUS3:
          RET
MUSIC3    ENDP

MUSIC4    PROC NEAR
          PUSH DS
          SUB AX,AX
          PUSH AX
          LEA SI,MUS_FREG4
          LEA BP,DS:MUS_TIME4
FREG4:    MOV DI,[SI]
          CMP DI,-1
          JE END_MUS4
          MOV DX,DS:[BP]
          CALL SOUNDF
          ADD SI,2
          ADD BP,2
          JMP FREG1
END_MUS4:
          RET
MUSIC4    ENDP

MUSIC5    PROC NEAR
          PUSH DS
          SUB AX,AX
          PUSH AX
          LEA SI,MUS_FREG5
          LEA BP,DS:MUS_TIME5
FREG5:    MOV DI,[SI]
          CMP DI,-1
          JE END_MUS5
          MOV DX,DS:[BP]
          CALL SOUNDF
          ADD SI,2
          ADD BP,2
          JMP FREG1
END_MUS5:
          RET
MUSIC5    ENDP

CODES  ENDS
    END MAIN

⌨️ 快捷键说明

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