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

📄 music.asm

📁 用汇编语言写的点歌系统,可以让主板发出简单音乐.并且可以事实选择和暂停你所要的歌曲.
💻 ASM
字号:
        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       ;0号功能
              MOV       AL,4        ;显示方式号4放在 AL中  320*200  四色图形
              INT       10H         ;显示器输出控制中断调用
              MOV       AH,0BH      ;置彩色调色板
              MOV       BH,0
              MOV       BL,4        ;BH=0,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

      MUSIC1  PROC      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
      MUSIC1  ENDP

    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


      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]
              MOV       BX,1400
              CALL      GENSOUND
              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]
              MOV       BX,1400
              CALL      GENSOUND
              ADD       SI,2
              ADD       BP,2
              JMP       FREG1
   END_MUS3:
              RET
      MUSIC3  ENDP
       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

⌨️ 快捷键说明

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