Skok (informatika): Porovnání verzí

Smazaný obsah Přidaný obsah
Hkmaly (diskuse | příspěvky)
m Opravy a doplnění linků.
dopřesnění + odkazy
Řádek 1:
'''Skok''' (angl. jump, branch) je změna v sekvenčním vykonávání [[počítačový program|počítačového programu]]. Nižší [[programovací jazyk]]y a [[strojový kód]] mají přímo příkaz skoku, vyšší programovací jazyky používají této konstrukce jen zřídka, aby bylo zachováno [[strukturované programování]], používají většinou [[cyklus (informatika)|cykly]] a volání [[funkce (programování)|funkcí]], procedur a metod.
 
Nejobecnější skok ve vyšších programovacích jazycích se obvykle označuje ''goto''. Blízko mají ke skoku i příkazy ''break'' a ''continue'' (viz [[Cjazyk (programovací jazyk)|C]]) respektive ''last'' a ''next'' (viz jazyk [[perl]]). SkokyPomocí skoku se ovšem skrývají v každéimplementují řídící konstrukcistruktury (''if'', ''[[while-do cyklus|while]]'', ''[[switch (programování)|switch]]'', ''[[for cyklus|for]]'', ...)a další.
 
Principielně existují dva druhy skoků:
Řádek 9:
Podmíněný skok lze využít k:
# větvení programu – výběr z alternativ - implementace příkazu ''if'' nebo ''switch''/''case''.
# vytvoření cyklu (smyčky) - skočí se podle splnění podmínky cyklu - implementace příkazů ''[[while-do cyklus|while]]'' nebo ''[[for cyklus|for]]''.
 
== Autorství podmíněného skoku ==
Řádek 25:
** '''dlouhý relativní skok''' (long jump) - do registru se přičítá rozsahem stejná hodnota, jako je rozsah čítače instrukcí
 
U moderních procesorů je podmíněný skok velice "drahá" operace z hlediska času zpracování - procesor provádí instrukce na přeskáčku a více současně, takže by potřeboval vědět která instrukce bude za skokem následovat dříve než ví, jestli bude podmínka splněna. Některé [[RISC]]ové procesory (např. [[SPARC]]) mají dokonce pravidla typu "ještě dvě instrukce za skokem se provedou bez ohledu na jeho výsledek", obvyklejším řešením je hádat (s využití informací o předchozím průchodu) která varianta nastane a v případě omylu zahodit rozpracované instrukce ze špatné větve a začít znova.
 
===Specifika architektury x86===
Řádek 33:
* '''dlouhé skoky''' (long jump, far jump) - Cílová adresa leží v jiném segmentu paměti, obvykle nepodmíněný skok na podprogram.
 
Jako zvláštní případ skoku (či spíše volání podprogramu) lze chápat i softwarový[[programové přerušení]] (interrupt). Od procesoru [[Intel 80286|80286]] přibývá možnost instrukcí skoku změnit úlohu (přepnout [[počítačový program|proces]]), což lze označit jako skok ještě delší než dlouhý a v procesoru [[Intel 80386|80386]] přibývá možnost změnit [[stránkování]] tak, že zůstanetezpracování procesu zůstává na stejné [[virtuální adresa|virtuální adrese]], ale změnítedochází adresuk fyzickouzměně -[[fyzická toadresa|fyzické adresy]] (často je ovšemtéto spíštechniky zajímavost, která se v programu objeví patrněvyužito pouze jako úmyslná snaha znesnadnit jeho [[debugování]] programu - viz [[zpětné inženýrství]]).
 
==Podívejte se také na==