Guest User

Untitled

a guest
May 25th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Progr           segment
  2.  
  3.                 assume  cs:Progr, ds:dane, ss:stosik
  4.  
  5. start:          mov     ax,dane
  6.                 mov     ds,ax
  7.                 mov     ax,stosik
  8.                 mov     ss,ax
  9.                 mov     sp,offset szczyt
  10.  
  11.  
  12.  
  13.  
  14.  
  15.        mov al,10110110b         ;Do AL  7,6<-10  5,4<-11(Read/Write least, then most, significant byte)  321<-011(licznik square waves)  0<-0(binarnie) (Timer Interrupt/czasomierz)
  16.        out 43h,al               ;Na port 43h wysylamy info konfiguracyjne
  17.        in al,61h                ;Do AL pobieramy wartosc z portu 61h
  18.        or al,11b                ;Na bitach 0 i 1 AL umieszczamy 11 co oznacza ze bedziemy korzystac ze speakera
  19.        out 61h,al               ;Zmieniona wartosc wciepujemy spowrotem na port 61h
  20.        mov cx, 54d              ;W CX licznik petli, tyle ile nutek mamy w zmiennej
  21.        mov bx, offset tabulatura;Do BX przypisujemy adres zmiennej nutki
  22.        mov dx, offset dlugosc   ;Do DX przypisujemy adres zmiennej czas
  23. petla:                          ;Etykieta petelki
  24.        push bx                  ;procedury call moc korzystac z tych wartosci
  25.        push dx
  26.        push cx
  27.        call graj                ;Wywolanie podprogramu graj
  28.        pop cx
  29.        pop dx                   ;Zbieramy ze stosu wartosc do DX (to co wczesniej zrzucilismy)
  30.        add dx, 2d               ;Dodajemy 2 do DX zeby miec adres nastepnej wartosci ze zmiennej czas
  31.        pop bx                   ;dodalismy 2 bo zmienna jest typu Word (DW = 2 bajty)
  32.        add bx, 2d               ;czyli kazda wartosc zmiennej nutki/czas ma dlugosc 2 bajty
  33.        loop petla               ;Loop czyli jesli wartosc CX > 0 to skocz do etykiety petla
  34.  
  35.        in al,61h                ;wczytujemy znowu wartosc z portu 61h do AL
  36.        and al,11111100b         ;maskujemy, 00 na koncu przerywa dzwieki ze speakera
  37.        out 61h,al               ;no i zwracamy ta zmieniona wartosc na port 61h
  38.  
  39.         mov     ah,4ch
  40.         mov     al,0h
  41.         int     21h
  42.  
  43. graj:
  44.        mov bx, [bx]             ;Do BX przypisujemy wartosc spod adresu BX
  45.        mov al,bl                ;Na port 42h wysylamy nute ktora znajduje sie w BX,
  46.        out 42h,al               ;robimy to w porcjach 8 bitowych najpierw BL,
  47.        mov al,bh                ;potem BH, bo magistrala 8 bitowa
  48.        out 42h,al
  49.        mov bx, dx               ;W DX znajduje sie czas trwania dzwieku
  50.        mov cx, [bx]             ;do CX przypisujemy wartosc spod adresu BX bo przerwanie 15h korzysta z CX
  51.        mov ah, 86h              ;te dwa kolejne wiersze to delay (czyli ten czas trwania dzwieku)
  52.        int 15h
  53. ret                             ;powrot z procedurki
  54.  
  55.  
  56.  
  57. Progr           ends
  58.  
  59. dane            segment
  60.  
  61.     ;nasze nutki czyli te wartosci przez ktore trzeba podzielic czestotliwosc zegara 1193181/f
  62.     tabulatura dw 3045,2712,3045,3620,3045,2712,3045,3620,2032,18,2032
  63.                dw 2416,18,2416,2280,18,2280,3045,2712,18,2712,2280,2416,2712
  64.                dw 3045,2712,3045,3620,2712,18,2712,2280,2416,2712
  65.                dw 3045,2712,3045,3620,2032,18,2032,1708,2032,2416
  66.                dw 2280,1810,2280,3045,3620,3045,3413,4062,4561,4561
  67.  
  68.  
  69.     ;czas czyli 32 - cala nuta, 16 - polnuta, 12 - cwierc_kropka, 8 - osemka...
  70.     dlugosc dw 6,3,5,14,6,3,5,14,7,1,5
  71.             dw 7,1,5,7,1,5,14,7,1,5,6,3,5
  72.             dw 6,3,5,14,7,1,5,6,3,5
  73.             dw 6,3,5,14,7,1,5,6,3,5
  74.             dw 12,10,6,3,5,6,3,5,12,5
  75.  
  76. dane            ends
  77.  
  78. stosik          segment
  79.                     dw    100h dup(0)
  80. szczyt          Label word
  81. stosik          ends
  82.  
  83. end start
Add Comment
Please, Sign In to add comment