ZÁSOBNÍK Zásobník je kus paměti sloužící k odkládání údajů. Hlavní použití bude asi pro uchovávání návratových adres při skoku do podprogramu. Jestliže je někde v programu instrukce CALL (volání podprogramu) provede procesor následující akce: 1. Uloží si do zásobníku návratovou adresu, tedy adresu instrukce, která následuje po instrukci call. 2. Skočí do podprogramu, tento provádí, až narazí na instrukci RET 3. Vytáhne ze zásobníku návratovou adresu a skočí na ni, tedy pokračuje ve vykonávání za instrukcí call. Zásobník je paměť typu LIFO (Last In First Out), to znamená, že to, co tam dáte naposledy, vytáhnete jako první. Představte si to jako hromadu hliněných destiček. Tu, kterou položíte jako poslední na hromadu, musíte zvednout jako první. V paměti je to ale tak, že destičky přidáváte dospodu stohu. Takto vypadá zjednodušeně Stack Segment (SS), tedy část paměti, kde se nachází zásobník. Na vršek hromady ukazuje SP (Stack Pointer). FFFFh X5 nejstarší položka zásobníku X4 druhá nejstarší X3 X2 X1 <---- Sem ukazuje SP 0000 Jestliže něco do zásobníku přidáte, vrazí se to dospodu a SP se SNÍŽÍ. Po vytažení ze zásobníku se SP opět ZVÝŠÍ. Pro uložení hodnoty na zásobník slouží instrukce PUSH. Jejím argumentem je většinou šestnáctibitový registr. Takže třeba PUSH AX uloží obsah AX do zásobníku. Opakem PUSH je POP, která hodnotu vyjme, takže POP AX vezme poslední hodnotu, která byla uložena na zásobník a uloží ji do AX. Takže finta pro prohození dvou registrů: PUSH AX ;na vrsku zasobniku je AX PUSH BX ;na vrsku zasobniku je BX POP AX ;BX z vrsku jsem presunul do AX POP BX ;vyjmutim BX se na vrsek dostalo AX a to dam do BX Zásobník je svině a pokud s ním chcete kouzlit, buďte hodně opatrní, je to jedna z lehčích cest, jak si resetnout počítač. výheň