Advertisement
Guest User

Untitled

a guest
Oct 16th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. org 100h
  2.  
  3. start:
  4.  
  5.   mov [y], 0 ; èòåðàòîð
  6.  
  7.   fwd:
  8.  
  9.   call decode_freq ; ïåðåâîä íîìåðà íîòû â ÷àñòîòó èç ìàññèâà è ïðîèãðûâàíèå å¸
  10.   call decode_wait ; ïåðåâîä íîìåðà íîòû â ïàóçó ïîñëå íîòû
  11.  
  12.   cmp [y],59
  13.   je ext ; åñëè â èòåðàòîðå óæå 24 - òî êîíåö ïðîãðàììû
  14.   inc [y] ; åñëè æå åùå íåò - òî èíêðåìåíòèðóåì
  15.  
  16.   jmp fwd ; âîçâðàùàåìñÿ íàçàä, äëÿ ïîâòîðåíèÿ öèêëà
  17.  
  18.   ext:
  19.   ret
  20.  
  21.  
  22. decode_freq:
  23.  
  24.   mov bx, freq       ; êîíñòðóêöèÿ íåîáõîäèìàÿ äëÿ ïîëó÷åíèÿ îïðåäåëåííîãî ýëåìåíòà ìàññèâà
  25.   movzx ax, byte[y]  ; -||-
  26.   add bx,ax          ; -||-
  27.   mov al, byte[bx]   ; -||-
  28.  
  29.   ; óñëîâèÿ äëÿ ìàññèâà ÷àñòîò
  30.  
  31.   cmp al,1
  32.   je f1
  33.   cmp al,2
  34.   je f2
  35.   cmp al,3
  36.   je f3
  37.   cmp al,4
  38.   je f4
  39.   cmp al,5
  40.   je f5
  41.   cmp al,6
  42.   je f6
  43.  
  44.   ; çíà÷åíèå â al ñðàâíèâàåòñÿ ñ "èíäåêñîì" "ìàññèâà" è
  45.   ; â ñîîòâåòñòâóþùåé ñòðîêå äåëàåò ïåðåõîä â ñîîòâåñòâóþùèé áëîê êîäà
  46.   ; àíàëîã îïåðàòîðà switch
  47.  
  48.   ; åñëè æå íè÷åãî íå ïîëó÷èëîñü ñðàâíèòü, ñäåëàåì ÷àñòîòó ïóñòîé, ÷òîáû íå âîñïðîèçâåñòè íè÷åãî ñòðàííîãî
  49.  
  50.   xor ebx, ebx
  51.   jmp dfexit ; è ïðûãíåì íà âûõîä
  52.  
  53.   f1:
  54.     mov bx, [freq1]
  55.     jmp dfexit
  56.   f2:
  57.     mov bx, [freq2]
  58.     jmp dfexit
  59.   f3:
  60.     mov bx, [freq3]
  61.     jmp dfexit
  62.   f4:
  63.     mov bx, [freq4]
  64.     jmp dfexit
  65.   f5:
  66.     mov bx, [freq5]
  67.     jmp dfexit
  68.   f6:
  69.     mov bx, [freq6]
  70.     jmp dfexit
  71.  
  72.   ; êàæäûé èç âûøåîïèñàííûõ áëîêîâ çàäàåò îïðåäåëåííîå çíà÷åíèå ÷àñòîòû â çàâèñèìîñòè
  73.   ; îò ìåòêè, ïî êîòîðîé ïåðåøëà ïðîãðàììà
  74.  
  75.   dfexit:
  76.  
  77.   ; â èòîãå ðåãèñòð bx ñîäåðæèò íóæíóþ ÷àñòîòó
  78.  
  79.   call beeper ; èìåííî å¸ è âîñïðîèçâîäèì
  80.  
  81.   ret
  82.  
  83. decode_time:
  84.   pusha
  85.  
  86.   mov bx, time
  87.   movzx cx, byte[y]
  88.   add bx,cx
  89.   mov cl, byte[bx]
  90.  
  91.   call delay_count       ; äåëàåò âñå òîæå ñàìîå, ÷òî è decode_freq, òîëüêî ñ äðóãèì ìàññèâîì
  92.  
  93.   popa
  94.   ret
  95.  
  96. decode_wait:
  97.   pusha
  98.  
  99.   mov bx, wtime
  100.   movzx cx, byte[y]
  101.   add bx,cx
  102.   mov cl, byte[bx]
  103.  
  104.   call delay_count       ; äåëàåò âñå òîæå ñàìîå, ÷òî è decode_freq, òîëüêî ñ äðóãèì ìàññèâîì
  105.  
  106.   popa
  107.   ret
  108.  
  109.  
  110. beeper:
  111.  
  112.   mov al, 182
  113.   out 43h, al ; óñòàíàâëèâàåì íóæíûé, äëÿ âîñïðîèçâåäåíèÿ, ðåæèì òàéìåðà = 0b10110110
  114.   mov ax, bx
  115.   out 42h, al ; óñòàíàâëèâàåì ÷àñòîòó èç ðåãèñòðà bx, ñíà÷àëà íèæíþþ ÷àñòü
  116.   mov al, ah
  117.   out 42h, al ; à çàòåì è âåðõíþþ, ïðåäâàðèòåëüíî ïîìåíÿâ al íà ah
  118.  
  119.   in al, 61h
  120.   or al, 03h ; 0x3 = 0b11
  121.   out 61h, al  ; ïåðåäàåì ÷àñòîòó è âêëþ÷àåì òàéìåð
  122.  
  123.   call decode_time ; ïîëó÷àåì çàäåðæêó íà ïðîèçâåäåíèå èç äðóãîãî ìàññèâà
  124.  
  125.   in al, 61h
  126.   and al, 0FCh ; 0xFC = 0b11111100
  127.   out 61h, al ; âûêëþ÷àåì çâóê
  128.  
  129.   ret
  130.  
  131. delay:
  132.   pusha
  133.  
  134.   mov     ah,86h
  135.   xor     cx,cx
  136.   mov     dx,55000 ; 55000 ìèêðîñåêóíä = 55 ìèëëèñåêóíä
  137.   int     15h      ;
  138.  
  139.   ; èñïîëüçóåòñÿ 86 ôóíêöèÿ 15 ïðåðûâàíèÿ, 86H = wait
  140.  
  141.   popa
  142.  
  143.   ret
  144.  
  145. delay_count:
  146.   pusha
  147.  
  148.   start_delay_count:
  149.  
  150.   dec cl ; äåêðåìåíòèðóåì çíà÷åíèå â ðåãèñòðå cl
  151.   call delay ; âûçûâàåì ôóíêöèþ ïàóçû
  152.   cmp cl, 0 ; ñðàâíèâàåì ñ íóëåì
  153.  
  154.   je end_delay_count ; êîíåö, åñëè íîëü
  155.   jmp start_delay_count ; âåðíóòüñÿ â íà÷àëî, åñëè íåò, äëÿ ïîâòîðåíèÿ
  156.  
  157.   end_delay_count:        
  158.   popa
  159.   ret
  160.  
  161.   freq1 dw 1810 ;ÌÈ âòîðàÿ îêòàâà
  162.   freq2 dw 2032 ;ÐÅ âòîðàÿ îêòàâà
  163.   freq3 dw 2712 ;Ëß ïåðâàÿ îêòàâà
  164.   freq4 dw 1708 ;ÔÀ âòîðàÿ îêòàâà
  165.   freq5 dw 2280 ;ÄÎ âòîðàÿ îêòàâà
  166.   freq6 dw 2416 ;ÑÈ ïåðâàÿ îêòàâà
  167.  
  168.   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  ; âðåìÿ ïðîèãðûâàíèÿ íîò
  169.   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   ; âðåìÿ ìåæäó íîòàìè
  170.   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 ; ÷àñòîòû
  171.  
  172.   y rb 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement