Advertisement
joker546645

Snake

Dec 22nd, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     ; Program linie.asm
  2.     ; Wyswietlanie znaków * w takt przerwan zegarowych Uruchomienie w trybie rzeczywistym procesora x86 lub na maszynie wirtualnej
  3.     ; zakonczenie programu po nacisnieciu dowolnego klawisza asemblacja (MASM 4.0):     masm  gwiazdki.asm,,,;  konsolidacja (LINK 3.60):  link  gwiazdki.obj;
  4.  
  5. .386
  6. rozkazy    SEGMENT    use16
  7. ASSUME    cs:rozkazy
  8.  
  9. linia  PROC
  10.     ; przechowanie rejestrów
  11.     push ax        
  12.     push bx
  13.     push es
  14.  
  15.     mov  ax, 0A000H  ; adres pamieci ekranu dla trybu 13H
  16.     mov  es, ax
  17.  
  18.     mov  bx, cs:adres_piksela  ; adres biezacy piksela
  19.     mov  al, cs:kolor
  20.     mov  es:[bx], al ; wpisanie kodu koloru do pamieci ekranu
  21.  
  22.    
  23.     cmp cl, 80   ; dol
  24.     jne dalej2
  25.     add bx, 320
  26. dalej2:
  27.     cmp cl, 72      ; gora
  28.     jne dalej3
  29.     sub bx, 320
  30. dalej3:
  31.     cmp cl, 75      ; lewo
  32.     jne dalej4
  33.     sub bx, 1
  34. dalej4:
  35.     cmp cl, 77      ; prawo
  36.     jne koniec
  37.     add bx, 1
  38.  
  39.     ; przejscie do nastepnego wiersza na ekranie
  40.      
  41. koniec:
  42.     ; sprawdzenie czy cała linia wykreslona
  43.     cmp  bx, 320*200  
  44.  
  45.     jne  dalej  ; skok, gdy linia jeszcze nie wykreslona
  46.  
  47.     ; kreslenie linii zostało zakonczone - nastepna linia bedzie kreslona w innym kolorze o 10 pikseli dalej
  48.     add  word PTR cs:przyrost, 10
  49.     mov  bx, 0
  50.     add  bx, cs:przyrost
  51.     inc  cs:kolor  ; kolejny kod koloru
  52.  
  53.     ; zapisanie adresu biezacego piksela
  54. dalej:
  55.     mov  cs:adres_piksela, bx
  56.  
  57.     ; odtworzenie rejestrów
  58.     pop     es
  59.     pop     bx                              
  60.     pop     ax
  61.  
  62.     ; skok do oryginalnego podprogramu obsługi przerwania zegarowego
  63.     jmp     dword PTR cs:wektor8            
  64.  
  65.  
  66. ; zmienne procedury  
  67. kolor    db  1    ; biezacy numer koloru
  68. adres_piksela  dw  0    ; biezacy adres piksela
  69. przyrost  dw  0
  70. wektor8    dd  ?
  71.  
  72. linia ENDP  
  73.     ; INT 10H, funkcja nr 0 ustawia tryb sterownika graficznego
  74. zacznij:
  75.     mov  ah, 0  
  76.     mov  al, 13H  ; nr trybu
  77.     int  10H
  78.  
  79.     mov  bx, 0
  80.     mov  es, bx    ; zerowanie rejestru ES
  81.     mov  eax, es:[32]  ; odczytanie wektora nr 8
  82.     mov  cs:wektor8, eax; zapamitanie wektora nr 8
  83.  
  84.     ; adres procedury 'linia' w postaci segment:offset
  85.     mov  ax, SEG linia
  86.     mov  bx, OFFSET linia
  87.  
  88.     cli    ; zablokowanie przerwa
  89.  
  90.     ; zapisanie adresu procedury 'linia' do wektora nr 8
  91.     mov  es:[32], bx
  92.     mov  es:[32+2], ax            
  93.  
  94.     sti        ; odblokowanie przerwa
  95.     mov cl, 80
  96. aktywne_oczekiwanie:
  97.      mov ah,1            
  98.      int 16H              
  99. ; funkcja INT 16H (AH=1) BIOSu ustawia ZF=1 jeśli
  100. ; naciśnięto jakiś klawisz
  101.      jz        aktywne_oczekiwanie
  102. ; odczytanie kodu ASCII naciśniętego klawisza (INT 16H, AH=0)
  103. ; do rejestru AL
  104.      mov       ah, 0
  105.      int       16H
  106.      in        al, 60h
  107.      cmp       al, 45       ; porównanie z kodem litery 'x'
  108.      mov        cl, al
  109.      jne       aktywne_oczekiwanie      ; skok, gdy inny znak
  110.      ; deinstalacja procedury obsługi przerwania zegarowego
  111.     mov ah, 0
  112.     mov al, 3h
  113.     int 10h
  114.     ; odtworzenie oryginalnej zawartoci wektora nr 8
  115.     mov  eax, cs:wektor8
  116.     mov  es:[32], eax            
  117.  
  118.    
  119.  
  120.    
  121.    
  122.     ; zakoczenie wykonywania programu
  123.     mov  ax, 4C00H                
  124.     int  21H
  125. rozkazy  ENDS
  126.  
  127. stosik  SEGMENT stack
  128. db  256 dup (?)
  129. stosik  ENDS
  130.  
  131. END  zacznij
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement