Advertisement
hugol

Untitled

Dec 18th, 2014
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Program linie.asm
  2. ; Wyświetlanie znaków * w takt przerwań zegarowych
  3. ; Uruchomienie w trybie rzeczywistym procesora x86
  4. ; lub na maszynie wirtualnej
  5. ; zakończenie programu po naciśnięciu dowolnego klawisza
  6. ; asemblacja (MASM 4.0): masm gwiazdki.asm,,,;
  7. ; konsolidacja (LINK 3.60): link gwiazdki.obj;
  8. .386
  9. rozkazy SEGMENT use16
  10.      ASSUME cs:rozkazy
  11.      linia PROC
  12. ; przechowanie rejestrów
  13.      push ax
  14.      push bx
  15.      push es
  16.      push dx
  17.      mov ax, 0A000H ; adres pamięci ekranu dla trybu 13H
  18.      mov es, ax
  19.      
  20.      
  21.      mov bx, cs:adres_piksela2 ; adres bieżący piksela
  22.      mov al, cs:kolor
  23.      mov es:[bx], al ; wpisanie kodu koloru do pamięci ekranu
  24.      
  25.      mov bx, cs:adres_piksela ; adres bieżący piksela
  26.      mov al, cs:kolor
  27.      mov es:[bx], al ; wpisanie kodu koloru do pamięci ekranu
  28.      
  29.  
  30.     ; przejście do następnego wiersza na ekranie
  31.      add bx, 321
  32.      mov dx, cs:adres_piksela2 ; adres bieżący piksela
  33.      add dx, 319
  34.     ; sprawdzenie czy cała linia wykreślona
  35.      cmp bx, 320*200
  36.      jb dalej ; skok, gdy linia jeszcze nie wykreślona
  37.     ; kreślenie linii zostało zakończone - następna linia będzie
  38.     ; kreślona w innym kolorze o 10 pikseli dalej
  39.      add word PTR cs:przyrost, 10
  40.      mov bx, 20
  41.      add bx, cs:przyrost
  42.      
  43.      mov dx, 319-20
  44.      sub dx, cs:przyrost
  45.      inc cs:kolor ; kolejny kod koloru
  46.     ; zapisanie adresu bieżącego piksela
  47. dalej:
  48.      mov cs:adres_piksela, bx
  49.      mov cs:adres_piksela2, dx
  50.     ; odtworzenie rejestrów
  51.      pop dx
  52.      pop es
  53.      pop bx
  54.      pop ax
  55.     ; skok do oryginalnego podprogramu obsługi przerwania
  56.     ; zegarowego
  57.      jmp dword PTR cs:wektor8
  58.     ; zmienne procedury
  59. kolor db 1 ; bieżący numer koloru
  60. adres_piksela dw 20 ; bieżący adres piksela
  61. adres_piksela2 dw 319-20 ; bieżący adres piksela
  62. przyrost dw 0
  63. wektor8 dd ?
  64. linia ENDP
  65. ; INT 10H, funkcja nr 0 ustawia tryb sterownika graficznego
  66. zacznij:
  67.      mov ah, 0
  68.      mov al, 13H ; nr trybu
  69.      int 10H
  70.      mov bx, 0
  71.      mov es, bx ; zerowanie rejestru ES
  72.      mov eax, es:[32] ; odczytanie wektora nr 8
  73.      mov cs:wektor8, eax; zapamiętanie wektora nr 8
  74.     ; adres procedury 'linia' w postaci segment:offset
  75.      mov ax, SEG linia
  76.      mov bx, OFFSET linia
  77.      cli ; zablokowanie przerwań
  78.     ; zapisanie adresu procedury 'linia' do wektora nr 8
  79.      mov es:[32], bx
  80.      mov es:[32+2], ax
  81.      sti ; odblokowanie przerwań
  82. czekaj:
  83.      mov ah, 1 ; sprawdzenie czy jest jakiś znak
  84.      int 16h ; w buforze klawiatury
  85.      jz czekaj
  86.      mov ah, 0 ; funkcja nr 0 ustawia tryb sterownika
  87.      mov al, 3H ; nr trybu
  88.      int 10H
  89.     ; odtworzenie oryginalnej zawartości wektora nr 8
  90.      mov eax, cs:wektor8
  91.      mov es:[32], eax
  92.     ; zakończenie wykonywania programu
  93.      mov ax, 4C00H
  94.      int 21H
  95. rozkazy ENDS
  96. stosik SEGMENT stack
  97.  db 256 dup (?)
  98. stosik ENDS
  99. END zacznij
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement