Вот с этого и нужно начинать. Стек это область памяти с доступом к ней по принципу LIFO (Lastt In - First Out).
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено _Bill 24 января 2006 г. 09:48
В ответ на: Ответ: в книжке про него очень скупо написано, так что пока не пойму зачем он нужен... отправлено monofin 24 января 2006 г. 09:27

В переводе на русский - Последний пришел - первый вышел. Пример из жизни - поездка в переполненном тролейбусе или стопка тарелок. Люди обычно для использованиф берут из стопки первую тарелку сверху, и кладут на стопку терелку также сверху после того как ей попользовались. Если тарелки все взяты и их больше нет, а требуется еще, то говорят о переполнении стека.
Применительно к памяти можно сказать, что при обращении к стеку считывается содержимое ячейки на вершине стека (берется тарелка сверху стопки) и указатель стека изменяется так, чтобы он указывал на очередную ячейку. При записи в стек, указатель изменяется так чтобы он адресовался к новой ячейке и потом туда записывается данные (ставится на стопку новая тарелка).
В AVR (и во многих других процессорах) при записи в стек указатель стека уменьшается (растет вниз), а при чтении из стека увеличивается. Поэтому при инициализации стека указатель устанавливается на ПОСЛЕДНИЙ адрес ОЗУ.
Для чего стек нужен? Он используется во многих случаях. В данном случае его основное назнаначение - хранение адреса возврата из подпрограммы. При обращении к подпрограмме (команды call, icall, rcall а также по прерываниям) текущи адрес счетчика команд сохраняется в стеке автоматически, и восстанавливается из стека также автоматически по командам ret и reti. Использование механизма стека особенно удобно при организации вложенных вызовов подпрограмм.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru