+ -
当前位置:首页 → 问答吧 → 汇编语言音乐程序

汇编语言音乐程序

时间:2010-12-22

来源:互联网

这是一个“歌唱祖国”的歌,用汇编写的,供参考
经调试过的,完全可用

DATA SEGMENT PARA'DATA'
FT DW 196,2000,196,2000,262,4000,196,4000,330,4000,262,4000,392,6000,440,2000,392,4000,392,2000,392,2000,523,4000
  DW 523,4000,440,3000,392,1000,349,2000,440,2000,392,12000,392,2000,392,2000,440,4000,440,4000
  DW 294,4000,294,4000,392,6000,349,2000,330,4000,196,2000,196,2000,392,4000,392,3000,440,1000
  DW 392,2000,349,2000,330,2000,294,2000,262,120000,0
OLDS DB ?
MESS1 DB 'PLEASE ENTER A KEY TO START',0DH,0AH,'$'
MESS2 DB ' ENTER S KEY TO STOP',0DH,0AH
  DB 'ENTER C KEY TO CONTINUE',0DH,0AH
  DB 'ENTER Q KEY TO QUIT',0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
  STA DW 100 DUP(?)
  TOP LABEL WORD
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE ,DS:DATA,ES:DATA,SS:STACK
START:
  MOV AX,STACK
  MOV SS,AX
  MOV SP,OFFSET TOP
  MOV AX,DATA
  MOV DS,AX
  MOV ES,AX
  CALL TMINIT
  MOV OLDS,AL
L0:MOV DX,OFFSET MESS1
  MOV AH,09H
  INT 21H
  MOV AH,8
  INT 21H
  CMP AL,'A'
  JNZ L0
  MOV DX,OFFSET MESS2
  MOV AH,09H
  INT 21H
   
L4: MOV SI,OFFSET FT
  SING:MOV CX,[SI]
  MOV DX,[SI+2]
  PUSH CX
  PUSH DX
L1: MOV DL,0FFH
  MOV AH,6
  INT 21H
  JZ L2
  CMP AL,'Q'
  JZ SDONE
  CMP AL,'S'
  JNZ L2
L3: MOV DL,0FFH
  MOV AH,6
  INT 21H
  CMP AL,'Q'
  JZ SDONE
  CMP AL,'C'
  JNZ L3
  JMP L2
L2: POP DX
  POP CX
 OR CX,CX
  JZ SDONE
  CALL TONE
  ADD SI,4
  JMP SING
  JMP L4
SDONE:MOV AL,OLDS
  CALL TMREST
  MOV AH,4CH
  INT 21H
MAIN ENDP

TMINIT PROC NEAR
  IN AL,43H
  MOV AH,AL
  MOV AL,0B6H
  OUT 43H,AL
  MOV AL,AH
  RET
TMINIT ENDP

TMREST PROC NEAR
  OUT 43H,AL
  RET
TMREST ENDP

FLOW EQU 4F38H
FHIGH EQU 14H
TONE PROC NEAR
  CMP CX,15H
  JAE TNEXT
  STC
  JMP SHORT TRET
TNEXT:PUSH AX
  PUSH CX
  PUSH DX
  MOV DX,FHIGH
  MOV AX,FLOW
  DIV CX
  OUT 42H,AL
  MOV AL,AH
  OUT 42H,AL
  IN AL,61H
  MOV AH,AL
  OR AL,3
  OUT 61H,AL
  POP DX
  CALL DELAY
  MOV AL,AH
  OUT 61H,AL
  POP CX
  POP AX
 TRET:RET
 TONE ENDP

MSI EQU 800
DELAY PROC NEAR
  PUSH CX
  PUSH DX
ELLLP:MOV CX,MSI
ILP:LOOP ILP
  DEC DX
  JNZ ILP
  POP DX
  POP CX
  RET
DELAY ENDP
 CODE ENDS
  END START
  ...

作者: lyric13   发布时间: 2010-12-22

先自己顶一个~

作者: lyric13   发布时间: 2010-12-22

不错·~~,帮顶!!!

作者: masmaster   发布时间: 2010-12-22

DW 392,2000,349,2000,330,2000,294,2000,262,120000,0
  120000?? 

 

作者: znxllyuan   发布时间: 2010-12-22

居然是大写字母。。我说按了半天才行 
 

作者: znxllyuan   发布时间: 2010-12-22