Zásobník hovorů

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 12. března 2018; kontroly vyžadují 3 úpravy .

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.

Implementace

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ě.

Podpora

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.

Použití

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:

Použití zásobníku v multitaskingových systémech

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.

Nestandardní použití

Zásobník lze použít nestandardně, například:

Alternativní použití

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.

Poznámky

Viz také

Poznámky

  1. Registrace - adresa - vrácení - Velká encyklopedie ropy a zemního plynu, článek . Získáno 13. ledna 2016. Archivováno z originálu 16. srpna 2016.