Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
рыбак.docx
Скачиваний:
35
Добавлен:
21.09.2019
Размер:
2.35 Mб
Скачать
    1. Стек. Его использование и аппаратная поддержка.

Во всех языках программирования есть понятие процедур с локальными переменными. Эти переменные доступны во время выполнения процедуры, но перестают быть доступными после окончания процедуры. Возникает вопрос: где должны храниться такие переменные?

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

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

Стек – это один из способов организации памяти, несколько отличающийся от организации памяти с произвольным доступом. Память ЭВМ, организованная в виде стека, включает в себя определенное количество одинаковых запоминающих ячеек, однако доступ к этим ячейкам не может осуществляться произвольным образом, т.е. в любое время к любой ячейке. Доступ к ячейкам стека осуществляется не по адресам ячеек, а только через так называемую «вершину стека» - ячейку памяти стека, доступную в данный момент времени. При последовательной записи данных в стек загружаемые данные последовательно помещаются на вершину стека, при этом ранее записанные данные как бы проталкиваются вглубь стека. В каждый момент времени для чтения доступно только слово, находящееся на его вершине. При этом прочитать слово можно только один раз, т.к. после прочтения оно выталкивается из стека и на его место становится слово, записанное ранее. Такой способ организации памяти коротко формулируют в виде: «последним пришел – первым вышел».

В ЭВМ стек реализуется в адресном пространстве ее оперативной памяти выделением под него определенного количества последовательных ячеек. Способ доступа к этим ячейкам памяти осуществляется путем специального режима адресации с использованием регистра под названием регистр-указатель стека. При работе со стеком регистр-указатель интерпретируется процессором как адрес вершины стека. Поэтому процедура определения выделяемой под стек области памяти состоит в начальной установке регистра-указателя, т.е. записи в него адреса ячейки памяти, являющейся вершиной пустого стека.

Запись числа в стек: процессор редактирует содержимое регистра-указателя, смещая его на одну ячейку в сторону уменьшения адресов, после чего в указываемую этим регистром ячейку памяти пересылается записываемое число. Метод адресации, который используется при записи числа в стек, носит название косвенная адресация через регистр с предварительным автоуменьшением его содержимого.

Чтение числа из стека: число прочитывается из ячейки памяти, адрес которой находится в регистре-указателе, после чего содержимое этого регистра автоматически корректируется в сторону увеличения адресов. При этом прочитанное число из стека никуда не девается, просто становится недоступным. При записи в стек очередного числа оно будет записано непосредственно перед вытолкнутым. Метод адресации, который используется при чтении из стека, называется косвенной адресацией через регистр с предварительным автоувеличением.