Advertisement
joker546645

6_4 kod

Dec 21st, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. rozkazy  SEGMENT  use16
  3. ASSUME  CS:rozkazy
  4.  
  5. wyswietl_AL  PROC
  6. ; wyswietlanie zawartosci rejestru AL na ekranie wg adresu  podanego w ES:BX
  7. ; stosowany jest bezposredni zapis do pamieci ekranu  
  8.  
  9. ; przechowanie rejestrów
  10.   push ax  
  11.   push cx
  12.   push dx
  13.  
  14.   in al, 60H
  15.  
  16.   mov  cl, 10  ; dzielnik
  17.          
  18.   mov  ah, 0  ; zerowanie starszej czesci dzielnej
  19.  
  20. ; dzielenie liczby w AX przez liczbe w CL, iloraz w AL, reszta w AH (tu: dzielenie przez 10)
  21.   div  cl  
  22.  
  23.   add    ah, 30H ; zamiana na kod ASCII
  24.   mov    es:[bx+4], ah ; cyfra jednosci
  25.  
  26.   mov    ah, 0
  27.   div    cl ; drugie dzielenie przez 10
  28.   add    ah, 30H ; zamiana na kod ASCII
  29.   mov    es:[bx+2], ah ; cyfra dziesiatek
  30.   add    al, 30H ; zamiana na kod ASCII
  31.   mov    es:[bx+0], al ; cyfra setek
  32.  
  33. ; wpisanie kodu koloru (intensywny biały) do pamieci ekranu
  34.   mov    al, 00001111B
  35.   mov    es:[bx+1],al
  36.   mov    es:[bx+3],al
  37.   mov    es:[bx+5],al
  38.  
  39. ; odtworzenie rejestrów
  40.   pop    dx
  41.   pop    cx
  42.   pop    ax
  43.   ret
  44.  
  45. wyswietl_AL  ENDP
  46.  
  47. obsluga_klawiatury PROC
  48.     in al, 60H
  49.     call wyswietl_AL
  50.    
  51.     jmp dword PTR cs:wektor9
  52.  
  53.     wektor9 dd ?
  54. obsluga_klawiatury ENDP
  55.  
  56. ;============================================================
  57. ; program główny
  58.  
  59. zacznij:
  60.     mov al, 0
  61.     mov ah, 5
  62.     int 10
  63.     mov ax, 0
  64.     mov ds, ax
  65.  
  66.     ; odczytanie zawartoci wektora nr 8 i zapisanie go w zmiennej 'wektor8' (wektor nr 8 zajmuje w pamici 4 bajty poczwszy od adresu fizycznego 8 * 4 = 32)
  67.     mov    eax,ds:[36]  ; adres fizyczny 0*16 + 32 = 32
  68.     mov    cs:wektor9, eax  
  69.  
  70.  
  71.     ; wpisanie do wektora nr 8 adresu procedury 'obsluga_zegara'
  72.     mov    ax, SEG obsluga_klawiatury ; cz segmentowa adresu
  73.     mov    bx, OFFSET obsluga_klawiatury ; offset adresu
  74.  
  75.     cli    ; zablokowanie przerwa  
  76.  
  77.     ; zapisanie adresu procedury do wektora nr 8
  78.     mov    ds:[36], bx   ; OFFSET          
  79.     mov    ds:[38], ax   ; cz. segmentowa
  80.  
  81.     sti      ;odblokowanie przerwa
  82.  
  83.     push bx
  84.     push cx
  85.     push es
  86.     mov cx, 0B800h ;adres pamieci ekranu
  87.     mov es, cx
  88.     mov bx, 0
  89. aktywne_oczekiwanie:
  90.     mov ah,1      
  91.     int 16H              
  92.     ; funkcja INT 16H (AH=1) BIOSu ustawia ZF=1 jeli nacinito jaki klawisz
  93.     jz    aktywne_oczekiwanie
  94.  
  95.     ; odczytanie kodu ASCII nacinitego klawisza (INT 16H, AH=0)  do rejestru AL
  96.     mov    ah, 0
  97.     int    16H
  98.     cmp    al, 1BH    ; porównanie z kodem klawisza esc
  99.     je    koniec   ; skok, gdy esc
  100.  
  101.     mov bx, 0
  102.     jmp aktywne_oczekiwanie
  103. koniec:
  104.     ; zakoczenie programu
  105.  
  106.     ; odtworzenie oryginalnej zawartoci wektora nr 8
  107.     mov    eax, cs:wektor9
  108.     cli
  109.     mov    ds:[36], eax  ; przesłanie wartoci oryginalnej do wektora 8 w tablicy wektorów przerwa
  110.     sti
  111.  
  112.     pop es
  113.     pop cx
  114.     pop bx
  115.     mov    al, 0
  116.     mov    ah, 4CH
  117.     int    21H
  118.  
  119. rozkazy    ENDS
  120.    
  121. nasz_stos   SEGMENT  stack
  122.     db    128 dup (?)
  123. nasz_stos   ENDS
  124.  
  125. END  zacznij
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement