INSTRUKCIE PRE RIADENIE BEHU PROGRAMU

   Procesor vykonava instrukcie v poradi, ako su za sebou zapisane v pameti. Hodnota registra IP (instrukcne pocitadlo) urcuje adresu vykonavanej instrukcie. Po kazdom nacitani bajtu instrukcie (operacneho kodu alebo argumentov) sa hodnota IP zvecsi o jednotku. Tomu sa hovori 'linearny beh programu'. Do funkcnej skupiny instrukcii pre riadenie behu programu patria vsetky instrukcie, ktore nejakym sposobom menia linearny beh programu. Pozname tieto zakladne podskupiny tychto instrukcii:

   Dalsim kriteriom hodnotenia instrukcie pre riadenie behu programu je vzdialenost aku dokaze instrukcia pri zmene linearneho behu programu prekonat, t.j. aky ma dosah. Rozlisujeme tieto tri typy instrukcii:

TypNazovDosah
SHORTkratky-128 az 127 bajtov
NEARblizkyv ramci segmentu
FARdalekymedzi segmentami

NEPODMIENENE SKOKY

   Vsetky nepodmienene skoky sa rovnako oznacuju spolocnym mnemotechnickym nazvom JMP. Nepodmienene skoky mozu byt vsetkych troch typov: SHORT, NEAR, FAR. Okrem toho cielova adresa moze byt priama, nachadzat sa priamo v instrukcii, alebo nepriama - ulozena v pameti a vtedy sa v instrukcii nachadza odkaz na toto pametove miesto. Kratke skoky typu SHORT sa pouzivaju v rozsahu +/-128 bajtov, blizke skoky typu NEAR zase v ramci jedneho segmentu a daleke skoky typu FAR sluzia na skakanie medzi segmentami.

   Volanie podprogramu znamena ze v programe je instrukcia volania podprogramu a na konci tohto podprogramu je zase instrukcia navratu z tohto podprogramu hned za instrukciu odskoku v hlavnom programe. Instrukcia volania podprogramu ulozi na zasobnik nasledujucu adresu v linearnom programe [podobne ako PUSH], na ktoru po vykonani podprogramu instrukcia navratu nastavi prislusnu hodnotu registra IP. Existuju dva typy volania podprogramov:

   CALL adresa ... Ako argument 'adresa' potrebuje specifikaciu miesta v programe, kam ma skakat. Podobne ako pri JMP, tato specifikacia moze byt priama - priamo adresa volania, alebo nepriama - adresa do pameti, kde sa nachadza adresa volania. Moze byt typu NEAR alebo FAR. Ak je typu NEAR, potom sa na zasobnik uklada iba offset adresy nasledujucej instrukcie [hodnota z registra IP] a ak je typu FAR tak potom sa na zasobnik ulozi najprv hodnota registra CS a potom IP. Po ulozeni potrebnych udajov na zasobnik sa vykona skok na argumentom specifikovane miesto v programe. Volania typu NEAR sa pouzivaju vramci jedneho segmentu, volania typu FAR sa pouzivaju pri volani medzi segmentami [podobne ako pri JMP].

   INT N ... Ako argument potrebuje jednobajtovu hodnotu [N = 0 az 255]. Toto volanie podprogramu je vzdy typu FAR. Najprv na zasobnik ulozi priznakovy regster, potom register CS a nakoniec register IP. Vynuluje priznaky IF a TF a skoci na adresu, ktora je zapisana v pameti na adrese 0:4*N. Adresa typu FAR je vzdy stvorbajtova, preto sa N nasobi styrmi a instrukcia nacitava tieto 4 bajty, ktorymi potom naplni registre CS a IP.

   INTO ... Nepotrebuje ziadny argument. Toto je podmienene volanie podprogramu. Ak je nastaveny priznak OF, potom sa vykona presne to iste ako pri 'INT 4'. Aj OF nie je nastaveny, INTO neprevadza ziadne operacie.

   Tu su instrukcie, ktore sluzia na konci podprogramov na to aby program, z ktoreho bol dany podprogram zavolany, pokracoval dalej za instrukciou volania daneho podprogramu. Tieto instrukcie navratu z podprogramu nepotrebuju ziadnu specifikaciu adresy, pretoze adresu, na ktoru skacu si precitaju zo zasobnika. Existuju dva druhy instrukcii navratu z podprogramu:

   RET ... sa pouziva pri navrate z podprogramov volanych instrukciou CALL. Moze byt NEAR alebo FAR. Pri volani podprogramu typu NEAR sa pouziva pre navrat z podprogramu instrukcia RET typu NEAR. Vtedy sa zo zasobnika vybera iba jedna hodnota, ktora sa potom zapise do registra IP. Ak bol podprogram volany instrukciou CALL typu FAR, potom pre navrat z takehoto podprogramu sa pouziva RET typu FAR. Vtedy sa zo zasobnika vyberaju dve hodnoty - pre obnovu registrov CS a IP. Ako sa daju jednotlive typy instrukcii RET rozlisit si ukazeme niekedy neskor. Okrem toho moze mat instrukcia RET aj jeden ciselny argument, potom instrukcia RET po vybere potrebnych udajov zo zasobnika este odoberie z vrcholu zasobnika pocet poloziek specifikovany argumentom. Toto vyuzivaju prekladace vyssich jazykov pri mazani argumentov procedur a funkcii zo zasobnika.

   IRET ... sa pouziva pri navrate z podprogramov volanych instrukciou INT. Pri navrate sa obnovi zo zasobnika aj priznakovy register, takze mozno povedat ze tato instrukcia ovplyvnuje hodnoty vsetkych priznakov.

Nazad na obsah , predchadzajuca a dalsia lekcia