PODMIENENE SKOKY

   Povedzme ze chceme porovnat ci maju registre AX a BX taky isty obsah a ak maju, spravit nejaku operaciu, a ak maju rozny obsah, vykonat zase nejaku inu operaciu. Na samotne porovnanie pouzijeme instrukciu 'CMP AX,BX', ktora nam nastavi alebo nenastavi priznak ZF podla toho, ci obsah registrov bol alebo nebol rovnaky. Ale co dalej ? A tu nam prave prichadzaju velmi vhod podmienene skoky. Pomocou nich mozeme vykonat nejaku cast programu, alebo inu cast programu podla toho, ci je priznak ZF nastaveny, alebo nie.

   Podmiene skoky teda sluzia na riadenie behu programu v zavislosti na stave priznakov. Mozno sa pomocou nich rozhodovat, kade sa bude uberat program dalej. V kazdej instrukcii podmieneneho skoku je zakodovana jedna podmienka. Ak je tato podmienka splnena, skok sa vykona a procesor pokracuje vo vykonavani programu od novej adresy. A ak nie je splnena, procesor pokracuje vo vykonavani programu dalej ako keby nebol skok.

   Vsetky podmienene skoky su vzdy typu SHORT. Ako operand potrebuju navestie - aby prekladac asembleru vedel kam maju skakat - kde ma procesor pokracovat v pripade splnenia podmienky. Prehlad vsetkych podmienenych skokov je v nasledujucej tabulke:

NazovPodmienkaVyznam podmienky
JZ
JE
ZF = 1nulovy vysledok
rovne
JNZ
JNE
ZF = 0nenulovy vysledok
nie rovne
JC
JB
JNAE
CF = 1nastal prenos
pod
nie nad alebo rovne
JNC
JAE
JNB
CF = 0nie je prenos
nie nad alebo rovne
nie pod
JSSF = 1znamienko
zaporny vysledok
JNSSF = 0nie je znamienko
kladny vysledok
JP
JPE
PF = 1parita
parny pocet jednotiek
JNP
JPO
PF = 0nie je parita
neparny pocet jednotiek
JOOF = 1pretecenie
JNOOF = 0nie je pretecenie
JBE
JNA
(CF or ZF) = 1pod alebo rovne
nie nad
JA
JNBE
(CF or ZF) = 0nad
nie pod alebo rovne
JL
JNGE
(SF xor OF) = 1mensie
nie vecsie alebo rovne
JGE
JNL
(SF xor OF) = 0vecsie alebo rovne
nie mensie
JLE
JNG
((SF xor OF) or ZF) = 1mensie alebo rovne
nie vecsie
JG
JNLE
((SF xor OF) or ZF) = 0vecsie
nie mensie alebo rovne
JCXZCX = 0ak je register CX nulovy

   Slova pod a nad vyjadruju vztah medzi hodnotami bez znamienok, slova vecsie a mensie vyjadruju vztah medzi hodnotami so znamienkami.

   Jednotlive mnemotechnicke nazvy instrukcii nachadzajuce sa v jednom policku tabulky su si navzajom plne ekvivalentne a prekladac assembleru ich preklada do toho isteho operacneho kodu.

   Okrem toho existuju este tri instrukcie urcene pre opakovanie urcitych programovych sekvencii (slucky) umoznujuce uskutocnit testovanie na odchod zo slucky. Podobne ako ostatne podmienene skoky, aj tieto vedia skakat iba v rozsahu +/- 128 bajtov. Tieto instrukcie su:

   LOOP ... odcita jednotku od registra CX a ak je obsah CX nenulovy, program pokracuje na cielovej adrese.

   LOOPZ ... odcita jednotku od registra CX a ak je obsah CX nenulovy a priznak ZF je nastaveny, program pokracuje na cielovej adrese.

   LOOPNZ ... odcita jednotku od registra CX a ak je obsah CX nenulovy a priznak ZF je nie je nastaveny, program pokracuje na cielovej adrese.

Nazad na obsah a predchadzajuca lekcia