 Wane informacje (2:482/33)  -WANE- 
 Msg  : 83 of 93                            Snt Loc
 From : Marcin Macinski                     2:482/33        Sun, 27 Oct, 05:12
 To   : All                                                 Sun, 27 Oct, 06:07
 Subj : Assembler, the story begins [part 4, infinite loop]

Vitay All!

 Wiemy ju, co to jest ptla i jak j wykorzysta. Ale co zrobi, kiedy
potrzebna jest ptla nieskoczona, czekajca np. na nacinicie jakiego
klawisza? Trzeba si posuy instrukcj skoku "J?? etykieta" do zbudowania
ptli bezwarunkowej, w ktrej bdziemy sprawdzali, czy nie zosta nacinity
klawisz. Moe to wyglca np. tak:

 ptla:
    czy_klawisz_nacinity   ;procedura sprawdzajca
jne ptla

 koniec:
    ;tutaj zakoczenie

 No wanie... nie znamy przecie rozkazw dokonujcych skoku. Oto 6 z nich,
ktre bd najczciej potrzebne. Reszt znajdziesz na licie mnemonikw, ktr
oczywicie posiadasz (;

>JMP etykieta
    Wykonuje skok bezwarunkowy do "etykieta"
>JB lub JNAE etykieta
    Skok gdy mniejszy (CF=1)
>JA lub JNBE etykieta
    Skok gdy wikszy (CF=0 i ZF=0)
>JAE lub JNB etykieta
    Skok gdy wikszy lub rwny (CF=0 lub ZF=1)
>JBE lub JNA etykieta
    Skok gdy mniejszy lub rwny (CF=1 lub ZF=0)
>JE lub JZ etykieta
    Skok gdy rwny (ZF=1)
>JNE lub JNZ etykieta
    Skok gdy rny (ZF=0)

 To CF i ZF w nawiasach to warunki wykonania instrukcji skokw. Mona je ustawi
wykonujc instrukcj CMP.

>CMP argument1,agrument2
    Porwnanie dwch argumentw. Na tej podstawie ustawiane s odpowiednie
znaczniki (C, Z, S, P) w rejestrze znacznikw, ktrego opis jest poniej.

--- (opis nie jest mj, otrzymaem go od MS) ---
 Rejestr ten nie jest osobno wydzielony. Zawiera on jednobitowe znaczniki (tzw.
flagi). Ma on nastpujc struktur:

Nr. bitu:  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
Flaga:     x   x   x   x   OF  DF  IF  TF  SF  ZF   x  AF   x  PF   x  CF
x - bit niewykorzystany (w wyszych procesorach znajduj si tam inne znaczniki
- tutaj przedstawiem podstawowe)

 CF (carry flag) - znacznik przeniesienia (Ustawiany, jeli wynik operacji
arytmetycznej nie mieci si w rejestrze. Stosowany ponadto do sygnalizowania
bdw.)
 PF (parity flag) - znacznik parzystoci (Przyjmuje warto 1, jeeli wynik
ostatniej operacji ma parzyst liczb ustawionych (warto 1) bitw)
 AF (auxiliary flag) - znacznik przeniesienia pomocniczego (Ustawiany jeli
nastpia poyczka z bitu 4 na 3 lub przeniesienie z 3 na 4)
 ZF (zero flag) - znacznik zera (Ustawiany, jeli wynik ostatniej operacji by
rwny zeru). Przydatny przy porwnaniach wartoci.
 SF (sign flag) - flaga znaku - uywany do dziaa na liczbach ze znakiem
(Zapalany, jeli wynik ostatniej operacji jest ujemny)
 TF (trap flag) - znacznik pracy krokowej (wykorzystywany do ledzenia programw
przez debuggery)
 IF (interrupt enable flag) - znacznik zezwolenia na przerwanie (Okrela, czy
procesor moe wykonywa przerwania. Zerowany dla bezpieczestwa przed wanymi
operacjami, np. przeniesienia stosu)
 DF (direction flag) - znacznik kierunku. Stosowany przy operacjach na
acuchach. Okrela czy rejestry indeksowe maj by zwikszane (0), czy
zmniejszane (1) podczas wykonywania operacji.
 OF (overflow flag) - znacznik przepenienia. Uywany do operacji na liczbach ze
znakiem (Zapalany, jeli wynik nie mieci si w zakresie argumentu instrukcji,
lub jeli bit znaku zostanie zmieniony w wyniku operacji)
--- (koniec nie mojego opisu) ---

 Zastosowanie instrukcji CMP:

 ptla:
    [blah blah]
    in al,60h
    cmp al,1
 jne ptla

 koniec:
    mov ax,4c00h
    int 21h

 Oho - pojawi si kolejny mnemonik - "IN".

>IN al,nr_portu  lub  IN al,dxu
>IN ax,nr_portu  lub  IN ax,dx
    Rozkaz czyta warto znajdujc si w porcie "nr_portu" i umieszcza j w
    rejestrze AL lub AX.

 No dobrze, to ju chyba wszystko, co trzeba wiedzie w czci teoretycznej,
eby sprbowa napisa jak krtk animacj, czego przykad jest w nastpnym
licie.

  ,
 /;`\ koniu
 ` | \____
 .-(_ ___ ):.
  `  | ,-'| ;
     ^    ^
--- GoldED/386 2.50+
 * Origin: By taki pikny dzie, e szkoda byo wstawa (2:482/33)
