Zásobník

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(link RAM)
(inicializace stack pointru)
Řádka 1: Řádka 1:
'''Zásobník''' (stack) slouží především k ukládání návratových adres při volání podprogramů. U nejmenších procesorů je realizován několika speciálními registry, u větších je v [[RAM]]. Pokud vám program v malém AVR fungoval a ve velkém se nevrací z podprogramů, chybí inicializace Stack Pointru.
'''Zásobník''' (stack) slouží především k ukládání návratových adres při volání podprogramů. U nejmenších procesorů je realizován několika speciálními registry, u větších je v [[RAM]]. Pokud vám program v malém AVR fungoval a ve velkém se nevrací z podprogramů, chybí inicializace Stack Pointru.
 +
 +
Stack pointer je realizován dvojicí registrů SPH:SPL, do kterých je možno zapisovat instrukcí OUT a číst je lze instrukcí IN. V jednoduchém programu potřebujeme jen inicializaci instrukcemi OUT na začátku programu. Inicializace je opravdu nutná třeba u procesoru [[ATmega8]], který má po zapnutí ve stack pointru nulu, tedy adresu mimo RAM. Novější [[ATmega88 a ATmega168]] tam mají hodnotu RAMEND, kterou lze ponechat beze změny a zásobník rovnou začít používat bez inicializace.

Verze z 22. 12. 2010, 17:12

Zásobník (stack) slouží především k ukládání návratových adres při volání podprogramů. U nejmenších procesorů je realizován několika speciálními registry, u větších je v RAM. Pokud vám program v malém AVR fungoval a ve velkém se nevrací z podprogramů, chybí inicializace Stack Pointru.

Stack pointer je realizován dvojicí registrů SPH:SPL, do kterých je možno zapisovat instrukcí OUT a číst je lze instrukcí IN. V jednoduchém programu potřebujeme jen inicializaci instrukcemi OUT na začátku programu. Inicializace je opravdu nutná třeba u procesoru ATmega8, který má po zapnutí ve stack pointru nulu, tedy adresu mimo RAM. Novější ATmega88 a ATmega168 tam mají hodnotu RAMEND, kterou lze ponechat beze změny a zásobník rovnou začít používat bez inicializace.

Osobní nástroje