Advertisement
joker546645

6_5 ukos

Dec 21st, 2017
70
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.     ; przejscie do nastepnego wiersza na ekranie
  23.     add  bx, 322  
  24.  
  25.     ; sprawdzenie czy cała linia wykreslona
  26. ;   cmp  bx, 320*200  
  27.     push ax
  28.     push cx
  29.     push dx
  30.     mov ax, 0 ;dziala, a podobno elementy stosu sa tu 16 bitowe
  31.     mov cx, 0
  32.     mov dx, 0
  33.     mov ax, bx
  34.     mov cx, 320
  35.     div cx
  36.     cmp dx, 0
  37.     pop dx
  38.     pop cx
  39.     pop ax
  40.     jne  dalej  ; skok, gdy linia jeszcze nie wykreslona
  41.  
  42.     ; kreslenie linii zostało zakonczone - nastepna linia bedzie kreslona w innym kolorze o 10 pikseli dalej
  43.     add  word PTR cs:przyrost, 10
  44.     mov  bx, 0
  45.     add  bx, cs:przyrost
  46.     inc  cs:kolor  ; kolejny kod koloru
  47.  
  48.     ; zapisanie adresu biezacego piksela
  49. dalej:
  50.     mov  cs:adres_piksela, bx
  51.  
  52.     ; odtworzenie rejestrów
  53.     pop     es
  54.     pop     bx                              
  55.     pop     ax
  56.  
  57.     ; skok do oryginalnego podprogramu obsługi przerwania zegarowego
  58.     jmp     dword PTR cs:wektor8            
  59.  
  60.  
  61. ; zmienne procedury  
  62. kolor    db  1    ; biezacy numer koloru
  63. adres_piksela  dw  0    ; biezacy adres piksela
  64. przyrost  dw  0
  65. wektor8    dd  ?
  66.  
  67. linia ENDP  
  68.     ; INT 10H, funkcja nr 0 ustawia tryb sterownika graficznego
  69. zacznij:
  70.     mov  ah, 0  
  71.     mov  al, 13H  ; nr trybu
  72.     int  10H
  73.  
  74.     mov  bx, 0
  75.     mov  es, bx    ; zerowanie rejestru ES
  76.     mov  eax, es:[32]  ; odczytanie wektora nr 8
  77.     mov  cs:wektor8, eax; zapamitanie wektora nr 8
  78.  
  79.     ; adres procedury 'linia' w postaci segment:offset
  80.     mov  ax, SEG linia
  81.     mov  bx, OFFSET linia
  82.  
  83.     cli    ; zablokowanie przerwa
  84.  
  85.     ; zapisanie adresu procedury 'linia' do wektora nr 8
  86.     mov  es:[32], bx
  87.     mov  es:[32+2], ax            
  88.  
  89.     sti        ; odblokowanie przerwa
  90.  
  91. czekaj:
  92.     mov  ah, 1    ; sprawdzenie czy jest jaki znak
  93.     int  16h      ; w buforze klawiatury
  94.     jz  czekaj        
  95.  
  96.     mov  ah, 0  ; funkcja nr 0 ustawia tryb sterownika
  97.     mov  al, 3H  ; nr trybu
  98.     int  10H
  99.  
  100.     ; odtworzenie oryginalnej zawartoci wektora nr 8
  101.     mov  eax, cs:wektor8
  102.     mov  es:[32], eax            
  103.  
  104.     ; zakoczenie wykonywania programu
  105.     mov  ax, 4C00H                
  106.     int  21H
  107. rozkazy  ENDS
  108.  
  109. stosik  SEGMENT stack
  110. db  256 dup (?)
  111. stosik  ENDS
  112.  
  113. END  zacznij
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement