Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Module_1_answers_with_practice.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.55 Mб
Скачать

10. Організація стеку. Адресація стекової пам’яті

http://uk.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA

Стек

Стек в інформатиці та програмуванні — різновид лінійного списку, структура даних, яка працює за принципом (дисципліною) «останнім прийшов — першим пішов» (LIFO, англ. last in, first out). Всі операції (наприклад, видалення елементу) в стеку можна проводити тільки з одним елементом, який знаходиться наверхівці стеку та був введений в стек останнім.

Організація в пам'яті комп'ютера

Стек може бути організований як масив або множина комірок в певній області комп'ютера з додатковим зберіганням ще й вказівника на верхівку стека. Заштовхування першого елемента в стек збільшує адресу вказівника, виштовхування елементу зменшує її. Таким чином, адреса вказівника завжди відповідає комірці масиву, в якій зараз знаходиться верхівка стеку.

Багато процесорів ЕОМ мають спеціалізовані регістри, які використовуються як вказівники на верхівку стеку, або використовують деякі з регістрів загального вжитку для цієї спеціальної функції в певних режимах адресації пам'яті.

http://www.avinout.com/osi_t10r4part1.html

Стекнеявный способ адресации, когда информация хранится в виде последовательности, в которой доступен только последний член. Аналогией стека может служить детская пирамидка, нижнее кольцо которой невозможно снять, пока не будут сняты все остальные. Стек всегда имеет единственный вход и выход информации - для хранения его адреса служит специальный регистр микропроцессора под названием указатель стека.

Стек это структура данных, над которой можно осуществлять две операции: проталкивание (Push) значения и выталкивание (Pop).

Пример: Пусть требуется на время сохранить значения трех целочисленных 2-байтовых переменных N1, N2 и N3, а затем их все восстановить. Воспользуемся для этого стековой памятью. Пусть указатель стека содержит адрес 2006 (рис. а). Тогда по команде "записать в стек N1" процессор проделает следующее:

  1. уменьшит указатель стека на 2;

  2. запишет N1 по полученному адресу 2004 (рис. б);

  3. аналогично при выполнении команд "записать в стек N2" и "записать в стек N3" значения этих переменных попадут в ячейки 2002 и 2000, причем указатель стека станет равным 2000 (рис. в).

®

2006

2006

2004

®

2004

N1

2002

2002

2000

2000

А

б

2006

2006

2004

N1

2004

N1

2002

N2

®

2002

N2

2000

N3

2000

???

®

В

Г

Теперь извлечем информацию: выполним команду "прочитать из стека в N3". При этом процесор:

1. считает в N3 значение из стека;

2. увеличит указатель на 2 (рис. г);

3. аналогично прочитаем N2 и N1, после чего стек опустеет и вернется к начальному состоянию (рис. а.)

Примечание. Значение в стеке после считывания не исчезает. Но его там можно не увидеть. Дело в том, что процессор иногда временно использует стек для своих "внутренних" нужд. При этом некоторые ячейки, адреса которых меньше текущего указателя стека изменятся. Следовательно, во избежание неприятностей лучше всегда считать, что после считывания информации в стековой памяти она пропадает.

В командах работы со стеком адрес ОЗУ не фигурирует в явном виде. Но при этом предполагалось, что указатель стекауже установлен на свободную область ОЗУ. В противном случае, запись в стек может стереть нужную информацию. Ответственность за правильность значения указателя стека лежит на программном обеспечении.

Стек используется в вычислительной технике очень широко:

  1. На аппаратном уровне процессор запоминает в стеке текущее значение счетчика адреса команд при вызове подпрограммы.

  2. В стек предварительно заносятся необходимые для подпрограммы параметры (так реализуется вызов процедур и функций с параметрами в языке Паскаль).

  3. Стек используется для временного сохранения значений внутренних регистров процессора

  4. Процессор использует стек при реализации прерываний от внешних устройств.

Самая простая реализация стека - это массив и индекс последнего находящегося в стеке элемента. Этот индекс называется указателем стека (SP- Stack Pointer).Стек может расти как вверх, так и вниз.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]