Invia.cz
Eurovíkendy
Kanárské ostrovy
Dominikánská republika
Madeira
Last minute
Vydělávejte peníze s INVIA.CZ
Skok (angl. jump, branch) je změna v sekvenčním vykonávání počítačového programu. Nižší programovací jazyky a strojový kód mají přímo příkaz skoku, vyšší (imperativní) programovací jazyky používají této konstrukce jen zřídka, aby bylo zachováno strukturované programování, používají většinou cykly a volá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 (např. v jazyku C) respektive last a next (např. v jazyku perl). Pomocí skoku se implementují řídící struktury if, while, switch, for, a další.
Principielně existují dva druhy skoků:
Podmíněný skok lze využít k:
Obsah |
Skok v instrukční síti většiny procesorů je implementován pomocí zápisu hodnoty nebo přičtení hodnoty do registru čítače instrukcí. Skok lze potom realizovat jako:
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 (instruction scheduling) a zároveň provádí více instrukcí současně (viz pipelining, superskalární architektura), takže procesor by pro zrychlení výpočtu potřeboval vědět, která instrukce bude za skokem následovat ještě dříve než je možné vyhodnotit splnění podmínky skoku. Některé RISCové procesory (např. SPARC) to řeší pravidly typu „ještě dvě instrukce za skokem se provedou bez ohledu na výsledek podmínky skoku“, obvyklejším řešením je odhadnout (s využití informací o předchozích průchodech danou částí programu), která varianta skoku nastane a v případě omylu zahodit rozpracované instrukce ze špatné větve, vyprázdnit instrukční frontu a načíst do ní instrukce ze správné větve.
Při programování v assembleru a strojovém kódu architektury x86 se také rozlišuje, zda cílová adresa skoku leží ve stejné oblasti (segmentu) paměti. Skoky tak lze dělit na:
Jako zvláštní případ skoku (či spíše volání podprogramu) lze chápat i programové přerušení (interrupt). Od procesoru 80286 přibývá možnost instrukcí skoku změnit úlohu (přepnout proces), což lze označit jako skok ještě delší než dlouhý a v procesoru 80386 přibývá možnost změnit stránkování tak, že zpracování procesu zůstává na stejné virtuální adrese, ale dochází k změně fyzické adresy (tato technika patrně nemá jiné využití než jako úmyslná snaha znesnadnit debugování programu - viz zpětné inženýrství).
Za vynálezce podmíněného skoku je považována Ada Lovelace, první programátorka, spolupracovnice Charlese Babbage, vývojáře prvního mechanického počítače.