【汇编】dosbox钢琴

  1 DATA SEGMENT 
  2      msg DB 0DH,0AH,'[ 1 2 3 4 5 6 7 ]'
  3          DB 0DH,0AH,' [ q w e r t y u ]'
  4          DB 0DH,0AH,'_________________'
  5          DB 0DH,0AH,'9: EXIT' 
  6          DB 0DH,0AH,'_________________','$' 
  7 ;********音调******后面用到-1判断音乐播是否放完
  8      sound_0 DW -1
  9      sound_11 DW 441,-1 
 10      sound_12 DW 495,-1
 11      sound_13 DW 556,-1
 12      sound_14 DW 589,-1
 13      sound_15 DW 661,-1
 14      sound_16 DW 742,-1 
 15      sound_17 DW 833,-1 
 16      sound_1 DW 882,-1 
 17      sound_2 DW 990,-1 
 18      sound_3 DW 1112,-1
 19      sound_4 DW 1178,-1 
 20      sound_5 DW 1322,-1 
 21      sound_6 DW 1484,-1 
 22      sound_7 DW 1655,-1
 23      time    DW 25
 24 DATA ENDS 
 25 ;************************
 26 STACK SEGMENT 
 27     Db 200 DUP ('STACK') 
 28 STACK ENDS 
 29 ;***********************
 30 CODE SEGMENT 
 31   ASSUME DS:DATA,SS:STACK,CS:CODE 
 32 START: 
 33       MOV AX,DATA 
 34       MOV DS,AX
 35 
 36       MOV aH,0 
 37       MOV AL,00 
 38       INT 10H
 39 
 40 ;*****定义一个宏***** 
 41 SHOW MACRO b 
 42     LEA DX,b 
 43     MOV AH,9 
 44     INT 21H 
 45 ENDM
 46 
 47 ;********一个声音宏********
 48 onesound macro soundis,jumpis,letteris
 49      CMP AL,letteris 
 50      JNZ jumpis 
 51      LEA SI,soundis
 52      LEA BP,DS:time
 53      CALL MUSIC 
 54      JMP input 
 55 ENDM
 56 
 57 show msg
 58 
 59 INPUT: MOV AH,01H 
 60        INT 21H 
 61        CMP AL,'9' 
 62        jnz go
 63 
 64        mov ah,4ch
 65        int 21h
 66 
 67 go: onesound sound_11,a0,'q'
 68 a0: onesound sound_12,b0,'w'
 69 b0: onesound sound_13,c0,'e'
 70 c0: onesound sound_14,d0,'r'
 71 d0: onesound sound_15,e0,'t'
 72 e0: onesound sound_16,f0,'y'
 73 f0: onesound sound_17,g0,'u'
 74 g0: onesound sound_1,h0,'1'
 75 h0: onesound sound_2,i0,'2'
 76 i0: onesound sound_3,j0,'3'
 77 j0: onesound sound_4,k0,'4'
 78 k0: onesound sound_5,l0,'5'
 79 l0: onesound sound_6,m0,'6'
 80 m0: onesound sound_7,n0,'7'
 81 n0: onesound sound_0,o0,al
 82 o0: jmp input
 83 ;********************发声
 84 
 85 GENSOUND PROC NEAR 
 86 ;-------------
 87 PUSH AX 
 88 PUSH BX 
 89 PUSH CX 
 90 PUSH DX 
 91 PUSH DI 
 92 ;--------------
 93 MOV AL,0B6H 
 94 OUT 43H,AL 
 95 MOV DX,12H 
 96 MOV AX,348ch 
 97 DIV DI 
 98 OUT 42H,AL 
 99 MOV AL,AH 
100 OUT 42H,AL 
101 IN AL,61H 
102 MOV AH,AL 
103 OR AL,3 
104 OUT 61H,AL
105 
106 WAIT1: MOV CX,3314 
107 call waitf 
108 DELAY1: DEC BX 
109 JNZ WAIT1 
110 MOV AL,AH 
111 OUT 61H,AL
112 
113 ;----------------
114 POP DI 
115 POP DX 
116 POP CX 
117 POP BX 
118 POP AX 
119 ;-------------------
120 RET 
121 GENSOUND ENDP
122 
123 ;**************************
124 waitf proc near 
125 push ax 
126 waitf1: 
127 in al,61h 
128 and al,10h 
129 cmp al,ah 
130 je waitf1 
131 mov ah,al 
132 loop waitf1 
133 pop ax 
134 ret 
135 waitf endp
136 
137 ;************************
138 MUSIC PROC NEAR 
139 PUSH DS 
140 SUB AX,AX 
141 PUSH AX 
142 FREG: MOV DI,[SI]
143 
144 CMP DI,-1;音乐是否放完?
145 JE END_MUS
146 
147 MOV BX,DS:[BP] 
148 CALL GENSOUND 
149 ADD SI,2 
150 ADD BP,2 
151 JMP FREG 
152 END_MUS: 
153 RET 
154 MUSIC ENDP 
155 CODE ENDS 
156 ;**********************
157 END START

 

转载于:https://www.cnblogs.com/tenderwx/p/5538925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值