Inštrukcie skoku


<= =>


Pretože si mikroprocesor vytvára frontu inštrukcií, nie sú z hľadiska rýchlosti behu programu skoky to pravé. Napriek tomu by sme zložitejšie programy bez nich asi ťažko tvorili. Aby sme mohli inštrukcie skoku používať, musíme vedieť vytvoriť návestie.

Návestie

Assembler je správne len názov prekladača "Jazyka symbolických adries", ktorý sa pre neho časom vžil. Názov "Jazyk symbolických adries" vyjadruje to, že miesto adries inštrukcií používame symboly. V Turbo assembleri nie sme v názvoch návestí nijak zvlášť obmedzovaný. Vo vkladanom assembleri môžeme za názov návestia použiť postupnosť znakov (zaciatok, navestie). Návestie s dvojbodkou uvedieme pred inštrukciu, na ktorú sa odkazujeme. Pri preklade je v miestach odkazu na návestie jeho názov nahradený skutočnou adresou inštrukcie.

Nepodmienený skok

Je to nepodmienený skok na iné miesto programu. To musí byť označené návestím. Za inštrukciou skoku je potom uvedený jeho názov. Ak skoky používame, hrozí vždy nebezpečie, že sa program zacyklí (a nikdy neskončí). Preto je dôležité si vždy rozmyslieť, za akých okolností by k tejto kolízii mohlo dôjsť.

Podmienený skok

Jedná sa o skok podmienený stavom jedného alebo viac, bitov registri príznakov F. Jen týmto spôsobom je možné prevádzať v assembleri priame vetvenie programu. Pred inštrukciou podmieneného skoku preto vždy prevedieme inštrukciu, ktorá použitý príznak nastaví. V prípade, že nie je splnená podmienka skoku, pokračuje program ďalej, ako by sa nič nedialo. Inštrukcie podmieneného skoku začínajú vždy písmenkom J. Za ním je skratka udávajúca na akých bitoch registru F je skok závislý. Pri hľadaní inštrukcie podmieneného skoku musíme myslieť na to, za akých okolností chceme skok vykonať. K tomu je tiež dobré si uvedomiť: Rozdiel čísel v tomto prípade prevedieme najlepšie inštrukciou CMP. Pre tvorbu cyklu môžeme použiť jeden z registrov, ktorý si pre krokovaciu premennú vyčleníme. Jednoduchý cyklus potom vytvoríme podmieneným skokom:
main() {
  asm MOV CL, 10  // do registra CL dosaď 10, počet krokov
  nav:            // návestie, tu umiestnime opakovanú činnosť
  asm {
    DEC CL        // odčítaj od CL číslo 1
    JNZ nav       // ak nie je nula skoč na návestie
  }
}

Program opakuje skok dokiaľ nie je v registri CL nulový výsledok.


<= =>