Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Запоминающие устройства компьютера.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
143.36 Кб
Скачать

Реализация стека

Общепринятым методом осуществления управления вызовами процедур и возвратами из них является использование стека.

Стек — это упорядоченный набор элементов, причем при обращении к нему можно получить доступ лишь к одному из элементов.

Этот элемент называется вершиной стека.

Число элементов стека (его длина) является переменным.

Добавления или удаления можно делать только на вершине стека, поэтому его называют магазинным списком, или списком, организованным по принципу "последним вошел — первым вышел" (last-in-first-out — LIFO).

Для реализации стека необходим набор ячеек памяти, в которые будут заноситься его элементы.

В основной (или виртуальной) памяти для стека резервируется блок смежных ячеек. Большую часть времени он частично заполнен элементами стека. Для обеспечения нормальной работы нужно помнить следующие адреса, которые хранятся в регистрах процессора.

Указатель стека. Содержит адрес вершины стека. Если в стек добавляется новый элемент (PUSH) или из него удаляется элемент (POP), указатель соответственно увеличивается или уменьшается на единицу. После этого он вновь содержит адрес вершины стека.

База стека. Содержит адрес нижней ячейки зарезервированного блока. При добавлении элемента в пустой стек эта ячейка используется первой. При попытке извлечь элемент из пустого стека генерируется сигнал ошибки.

Предел стека. Содержит адрес второго конца, т.е. вершины зарезервированного блока. При попытке добавить новый элемент в заполненный стек генерируется сигнал ошибки.

Традиционно сложилось так, что у большинства современных машин основой стека является ячейка с максимальным адресом, а его пределом — ячейка с минимальным адресом. Таким образом, стек является обращенным, и при его возрастании заполняются ячейки с убывающими адресами.

Вызов процедуры и возврат из нее

Общепринятым методом управления вызовами процедур и возвратами из них является использование стека. При обработке вызова процессор помещает в стек адрес возврата. При возврате из процедуры процессор использует адрес с вершины стека.