Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- start:
- mov [y], 0 ; èòåðàòîð
- fwd:
- call decode_freq ; ïåðåâîä íîìåðà íîòû â ÷àñòîòó èç ìàññèâà è ïðîèãðûâàíèå å¸
- call decode_wait ; ïåðåâîä íîìåðà íîòû â ïàóçó ïîñëå íîòû
- cmp [y],59
- je ext ; åñëè â èòåðàòîðå óæå 24 - òî êîíåö ïðîãðàììû
- inc [y] ; åñëè æå åùå íåò - òî èíêðåìåíòèðóåì
- jmp fwd ; âîçâðàùàåìñÿ íàçàä, äëÿ ïîâòîðåíèÿ öèêëà
- ext:
- ret
- decode_freq:
- mov bx, freq ; êîíñòðóêöèÿ íåîáõîäèìàÿ äëÿ ïîëó÷åíèÿ îïðåäåëåííîãî ýëåìåíòà ìàññèâà
- movzx ax, byte[y] ; -||-
- add bx,ax ; -||-
- mov al, byte[bx] ; -||-
- ; óñëîâèÿ äëÿ ìàññèâà ÷àñòîò
- cmp al,1
- je f1
- cmp al,2
- je f2
- cmp al,3
- je f3
- cmp al,4
- je f4
- cmp al,5
- je f5
- cmp al,6
- je f6
- ; çíà÷åíèå â al ñðàâíèâàåòñÿ ñ "èíäåêñîì" "ìàññèâà" è
- ; â ñîîòâåòñòâóþùåé ñòðîêå äåëàåò ïåðåõîä â ñîîòâåñòâóþùèé áëîê êîäà
- ; àíàëîã îïåðàòîðà switch
- ; åñëè æå íè÷åãî íå ïîëó÷èëîñü ñðàâíèòü, ñäåëàåì ÷àñòîòó ïóñòîé, ÷òîáû íå âîñïðîèçâåñòè íè÷åãî ñòðàííîãî
- xor ebx, ebx
- jmp dfexit ; è ïðûãíåì íà âûõîä
- f1:
- mov bx, [freq1]
- jmp dfexit
- f2:
- mov bx, [freq2]
- jmp dfexit
- f3:
- mov bx, [freq3]
- jmp dfexit
- f4:
- mov bx, [freq4]
- jmp dfexit
- f5:
- mov bx, [freq5]
- jmp dfexit
- f6:
- mov bx, [freq6]
- jmp dfexit
- ; êàæäûé èç âûøåîïèñàííûõ áëîêîâ çàäàåò îïðåäåëåííîå çíà÷åíèå ÷àñòîòû â çàâèñèìîñòè
- ; îò ìåòêè, ïî êîòîðîé ïåðåøëà ïðîãðàììà
- dfexit:
- ; â èòîãå ðåãèñòð bx ñîäåðæèò íóæíóþ ÷àñòîòó
- call beeper ; èìåííî å¸ è âîñïðîèçâîäèì
- ret
- decode_time:
- pusha
- mov bx, time
- movzx cx, byte[y]
- add bx,cx
- mov cl, byte[bx]
- call delay_count ; äåëàåò âñå òîæå ñàìîå, ÷òî è decode_freq, òîëüêî ñ äðóãèì ìàññèâîì
- popa
- ret
- decode_wait:
- pusha
- mov bx, wtime
- movzx cx, byte[y]
- add bx,cx
- mov cl, byte[bx]
- call delay_count ; äåëàåò âñå òîæå ñàìîå, ÷òî è decode_freq, òîëüêî ñ äðóãèì ìàññèâîì
- popa
- ret
- beeper:
- mov al, 182
- out 43h, al ; óñòàíàâëèâàåì íóæíûé, äëÿ âîñïðîèçâåäåíèÿ, ðåæèì òàéìåðà = 0b10110110
- mov ax, bx
- out 42h, al ; óñòàíàâëèâàåì ÷àñòîòó èç ðåãèñòðà bx, ñíà÷àëà íèæíþþ ÷àñòü
- mov al, ah
- out 42h, al ; à çàòåì è âåðõíþþ, ïðåäâàðèòåëüíî ïîìåíÿâ al íà ah
- in al, 61h
- or al, 03h ; 0x3 = 0b11
- out 61h, al ; ïåðåäàåì ÷àñòîòó è âêëþ÷àåì òàéìåð
- call decode_time ; ïîëó÷àåì çàäåðæêó íà ïðîèçâåäåíèå èç äðóãîãî ìàññèâà
- in al, 61h
- and al, 0FCh ; 0xFC = 0b11111100
- out 61h, al ; âûêëþ÷àåì çâóê
- ret
- delay:
- pusha
- mov ah,86h
- xor cx,cx
- mov dx,55000 ; 55000 ìèêðîñåêóíä = 55 ìèëëèñåêóíä
- int 15h ;
- ; èñïîëüçóåòñÿ 86 ôóíêöèÿ 15 ïðåðûâàíèÿ, 86H = wait
- popa
- ret
- delay_count:
- pusha
- start_delay_count:
- dec cl ; äåêðåìåíòèðóåì çíà÷åíèå â ðåãèñòðå cl
- call delay ; âûçûâàåì ôóíêöèþ ïàóçû
- cmp cl, 0 ; ñðàâíèâàåì ñ íóëåì
- je end_delay_count ; êîíåö, åñëè íîëü
- jmp start_delay_count ; âåðíóòüñÿ â íà÷àëî, åñëè íåò, äëÿ ïîâòîðåíèÿ
- end_delay_count:
- popa
- ret
- freq1 dw 1810 ;ÌÈ âòîðàÿ îêòàâà
- freq2 dw 2032 ;ÐÅ âòîðàÿ îêòàâà
- freq3 dw 2712 ;Ëß ïåðâàÿ îêòàâà
- freq4 dw 1708 ;ÔÀ âòîðàÿ îêòàâà
- freq5 dw 2280 ;ÄÎ âòîðàÿ îêòàâà
- freq6 dw 2416 ;ÑÈ ïåðâàÿ îêòàâà
- time db 2,2,8,8,2,2,4,4,8,8,2,2,8,8,2,2,4,4,4,4,12,2,2,8,8, 8,2,2,4,4,8,8,2,2,8,8,2,2,4,4,4,4,12,2,2,12,2,2,4,4,4,4,8,8, 24,2,2,2,2,32 ; âðåìÿ ïðîèãðûâàíèÿ íîò
- wtime db 1,1,1,12,1,1,1,1,1,4,1,1,1,12,1,1,1,1,1,1,1,1,1,1, 1,4,1,1,1,1,1,4,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1 ; âðåìÿ ìåæäó íîòàìè
- freq db 1,2,1,3,4,1,4,1,2,2,4,1,4,3,2,5,2,5,6,2,5,1,2,1,3, 3,4,1,4,1,2,2,4,1,4,3,2,5,2,5,6,2,5,6,5,2,5,2,1,2,5,6,3,4, 1,1,4,1,2,1 ; ÷àñòîòû
- y rb 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement