zásobník volání _ _ _ _ _ _ _ _ _ volání) a/nebo návrat do programu z obsluhy přerušení (včetně přepínání úloh v prostředí multitaskingu ).
Když je zavolán podprogram nebo dojde k přerušení , návratová adresa se zadá do zásobníku - adresa v paměti další instrukce pozastaveného programu a řízení se přenese na podprogram nebo obsluhu podprogramu. S následným vnořeným nebo rekurzivním voláním, přerušením podprogramu nebo obsluhou přerušení se do zásobníku přesune další návratová adresa atd.
Při návratu z podprogramu nebo obsluhy přerušení je návratová adresa odstraněna ze zásobníku a řízení je přeneseno na další instrukci pozastaveného (pod)programu.
Zásobník volání je obvykle implementován jedním z následujících způsobů:
Pokud není žádný zásobník nebo je jeho hloubka omezena, jsou vnořená volání vyloučena nebo je omezen jejich počet. Pokud je potřeba více vnoření, lze zásobník volání nebo jeho rozšíření implementovat programově.
Volání podprogramů a návraty z podprogramů a obsluhy přerušení jsou obvykle prováděny specializovanými instrukcemi procesoru. Kromě instrukcí volání a návratu mají procesory často instrukce pro použití zásobníku volání také pro ukládání dat - jejich vkládání do zásobníku, jejich odstranění ze zásobníku, úprava obsahu zásobníku.
Instrukce volání, návratu a zásobníku se mohou lišit ve velikosti uložených dat (v tomto případě musíte použít odpovídající instrukce nebo jejich ekvivalenty).
Někdy se návratové procedury z podprogramu a obsluhy přerušení od sebe liší a také vyžadují různé instrukce (například při návratu z přerušení je často nutné vyjmout příznakový registr ze zásobníku a/nebo umožnit zpracování souběžná přerušení, která mohou být automaticky deaktivována, když je zavolána obsluha).
Při absenci specializovaných instrukcí (u procesorů s redukovanou instrukční sadou) jsou volání, návraty a další práce se zásobníkem volání realizovány obvyklými instrukcemi pro práci s pamětí/registry a řídící přenos.
Zásobník volání lze použít pro různé účely, ale jeho hlavním účelem je sledovat, kam by se každá z volaných procedur měla po dokončení vrátit. Za tímto účelem, když je volána procedura (voláním instrukcí), adresa instrukce následující po volající instrukci ("zpáteční adresa") je vložena do zásobníku. Po dokončení musí volaná procedura vydat návratovou instrukci ke skoku na adresu v zásobníku.
Kromě zpáteční adresy mohou být na zásobníku uložena další data, například:
V multitaskingových systémech má každá úloha obvykle svůj vlastní zásobník, a když se úloha přepne, přesune se na něj ukazatel zásobníku procesoru.
Zásobník lze použít nestandardně, například:
V alternativním použití se ukazatel zásobníku přesune do oblasti dat a instrukce zásobníku se použijí jako operace s řetězci pro zpracování sekvenčních dat v paměti.
Při alternativním použití není zpracování přerušení možné, protože přerušení musí být zakázáno, aby nedošlo k poškození dat.