Вы нашли то, что искали?
Главная Разделы Поддержка ₽

Добавить страницу в закладки ->

3.2. Организация стека. Вычислительные системы, сети и телекоммуникации

Лекции по Вычислительным системам, сетям и телекоммуникациям   

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

3.2. Организация стека

Особенность стека по сравнению с другой оперативной памятью – это заданный и неизменяемый способ адресации.

При записи любого числа (кода) в стек число записывается по адресу, определяемому как содержимое регистра указателя стека, предварительно уменьшенное (декрементированное) на единицу (или на два, если 16-разрядные слова расположены в памяти по четным адресам). При чтении из стека число читается из адреса, определяемого содержимым указателя стека, после чего это содержимое указателя стека увеличивается (инкрементируется) на единицу (или на два). В результате получается, что число, записанное последним, будет прочитано первым, а число, записанное первым, будет прочитано последним. Такая память называется LIFO или памятью магазинного типа (например, в магазине автомата патрон, установленный последним, будет извлечен первым).

Принцип действия стека показан на рис. 3.2 (адреса ячеек памяти выбраны условно).

Принцип работы стека.
Рисунок 3.2 – Принцип работы стека

Пусть, например, текущее состояние указателя стека 1000008, и в него надо записать два числа (слова). Первое слово будет записано по адресу 1000006 (перед записью указатель стека уменьшится на два). Второе – по адресу 1000004. После записи содержимое указателя стека – 1000004. Если затем прочитать из стека два слова, то первым будет прочитано слово из адреса 1000004, а после чтения указатель стека станет равным 1000006. Вторым будет прочитано слово из адреса 1000006, а указатель стека станет равным 1000008. Все вернулось к исходному состоянию. Первое записанное слово читается вторым, а второе – первым.

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

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


Последние изменения страницы: 26.01.2018






© Банк лекций Siblec.ru
Электронная техника, радиотехника и связь. Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки. Карта сайта

Поддержка сайта Siblec.ru

Наш Сайт выражает огромную блогодарность тем, кто помогает нам! Спасибо Вам, Друзья!



Новосибирск, Екатеринбург, Москва, Санкт-Петербург, Нижний Новгород, Ростов-на-Дону, Чебоксары.

E-mail: formyneeds@yandex.ru