论坛: 编程破解 标题: 这是一个汇编音乐程序希望哪位大哥能帮我写个它的思路 复制本贴地址    
作者: lizhanshuo [lizhanshuo]    论坛用户   登录
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

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



地主 发表时间: 04-06-23 18:11

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号