Advertisement
piotranon

Untitled

Jun 29th, 2020
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. org 100h
  2. section .text
  3.  
  4. call initVGA
  5. call petla
  6.  
  7. zakoncz:
  8.     mov ah, 9
  9.     mov dx, blad
  10.     int 21h
  11.     mov eax,4c00h;zakonczenie programu
  12.     int 21h  
  13.  
  14. petla:
  15.     ; otwieramy plik
  16.     mov ax, 3d00h
  17.     mov dx, plik1
  18.     int 21h
  19.  
  20.     call otworz
  21.     call wait2seconds
  22.  
  23.     mov ah,0
  24.     int 10h
  25.  
  26.     mov ax, 3d00h; otwieramy plik
  27.     mov dx, plik2
  28.     int 21h
  29.  
  30.     call otworz
  31.     call wait2seconds
  32.  
  33.     mov ah,0
  34.     int 10h
  35.  
  36.     mov ax, 3d00h; otwieramy plik
  37.     mov dx, plik2
  38.     int 21h
  39.  
  40.     call otworz
  41.     call wait2seconds
  42.  
  43.     mov ah,0
  44.     int 10h
  45.    
  46.     jmp petla
  47.  
  48. wait2seconds:
  49.     ;wait 1s
  50.     mov     CX, 0FH
  51.     mov     DX, 4240H
  52.     mov     AH, 86H
  53.     int     15H
  54.     ;wait 1s
  55.     mov     CX, 0FH
  56.     mov     DX, 4240H
  57.     mov     AH, 86H
  58.     int     15H
  59.     ret
  60.    
  61. initVGA:
  62.     mov ax,13h; inicjalizajca trybu graficznego 320x200x256
  63.     int 10h
  64.     ret
  65. otworz:
  66.     jnc otw_ok
  67. otw_ok:;probujemy utworzyc uchwyt do pliku, odczytac naglowek
  68.     mov bx, ax          ; bx = uchwyt do pliku
  69.     mov ah, 3fh         ; czytanie z pliku
  70.     mov cx, 54          ; wyrzucamy 54 bajty naglowka
  71.     mov dx, smieci
  72.     int 21h
  73.     jc zakoncz
  74.     xor si, si          ; indeks do tablicy "paleta"
  75.  
  76. czytaj_pal:   ;funkcja wczytuje 4 baity i
  77.     mov ah, 3fh         ; czytanie z pliku
  78.     mov cx, 4           ; czytam po 4 bajty - do b,g,r i z.
  79.     mov dx, b
  80.     int 21h
  81.     jc zakoncz
  82.  
  83.     mov al, [r]
  84.     shr al, 2
  85.     mov [paleta+si], al     ; paleta[si] = [r] / 4
  86.  
  87.     mov al, [g]
  88.     shr al, 2
  89.     mov [paleta+si+1], al   ; paleta[si] = [g] / 4
  90.    
  91.     mov al, [b]
  92.     shr al, 2
  93.     mov [paleta+si+2], al   ; paleta[si] = [b] / 4
  94.  
  95.     add si, 3          
  96.  
  97.     cmp si, 256*3       ; sprawdz, czy nie zapisalismy
  98.                         ; juz wszystkich kolorow
  99.     jb czytaj_pal
  100.  
  101.     xor ax, ax
  102.     xor si, si          ; SI = indeks do palety
  103.  
  104.     mov dx, 3c8h        ; port karty graficznej
  105.  
  106. wyslij_palete:
  107.     out dx, al          ; wysy�amy numer rejestru,
  108.                         ; wszystkie od 0 do 255
  109.  
  110.     inc dx          ; DX = port 3C9h
  111.  
  112.     push    ax
  113.  
  114.     ; zapisujemy kolorki:
  115.  
  116.     mov al, [paleta+si]     ; AL = czerwony
  117.                    
  118.     out dx, al
  119.  
  120.     mov al, [paleta+si+1]   ; AL = zielony
  121.     out dx, al
  122.  
  123.     mov al, [paleta+si+2]   ; AL = niebieski
  124.     out dx, al
  125.  
  126.     pop ax
  127.  
  128.     add si, 3           ; przejd� do nast�pnych kolor�w
  129.  
  130.     dec dx          ; DX z powrotem 3C8h
  131.  
  132.     inc ax          ; wybierzemy kolejny rejestr koloru
  133.                     ; w karcie graficznej
  134.  
  135.     cmp ax, 256         ; sprawd�, czy ju� koniec pracy
  136.     jb  wyslij_palete
  137.  
  138.     mov ax, 0a000h
  139.     mov ds, ax      ; czytaj bezpo�rednio do pami�ci ekranu
  140.  
  141.     mov dx, 64000-320       ; DX = adres ostatniego wiersza
  142.  
  143.     mov cx, 320         ; z pliku czytamy po 320 bajt�w
  144.  
  145. obrazek:
  146.     mov ah, 3fh
  147.     int 21h         ; czytaj 320 bajt�w prosto na ekran
  148.     jc  zakoncz
  149.  
  150.     sub dx, 320         ; przejd� do wcze�niejszego wiersza
  151.     jnc obrazek         ; dop�ki nie musimy po�ycza�
  152.                     ; do odejmowania. Po�yczymy dopiero
  153.                     ; wtedy, gdy DX < 320 - a to si�
  154.                     ; zdarzy dopiero, gdy DX = 0
  155.                     ; Wtedy ko�czymy prac�.
  156.  
  157. ; koniec programu:
  158.  
  159.     mov ah, 3eh
  160.     int 21h         ; zamknij plik
  161.     jc  zakoncz
  162.  
  163.     xor ah, ah
  164.     int 16h        
  165.  
  166.     mov ax, 3
  167.     int 10h
  168.     ret
  169.  
  170. plik1   db  "rysunek.bmp",0
  171. plik2   db  "rysunek2.bmp",0
  172. plik3   db  "rysunek3.bmp",0
  173. blad    db  "Blad pliku!$"
  174.  
  175. smieci:     times   54  db 0
  176. paleta:     times   768 db 0
  177. b       db 0
  178. g       db 0
  179. r       db 0
  180. z       db 0
  181. kolor       db 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement