Команды для работы с подпрограммами. Стеки
В практике программирования широко используется такой прием, как организация подпрограмм (п/п). Подпрограмма описывается один раз, а использоваться (вызываться) может из различных мест программы. При этом, после того как п/п закончила свою работу, управление должно быть передано туда, откуда п/п была вызвана на команду, следующую в памяти сразу за командой обращения к п/п. Адрес команды, на которую управление передается после окончания работы п/п, называется адресом возврата. Очевидно, для того, чтобы начать выполнять п/п, в программный счетчик необходимо загрузить адрес первой команды п/п. Для осуществления возврата из п/п необходимо запомнить в каком-то месте адрес возврата. Можно, например, сохранить адрес возврата в одном из регистров процессора. Такой способ сохранения адреса возврата очень прост и легко реализуется. Однако он обладает одним существенным недостатком. Достаточно часто встречаются п/п, которые вызывают другие п/п. Пусто основная программа вызвала п/п А. она в свою очередь обратилась к п/п В. если адрес возврата из п/п А храниться в регистре процессора, то куда девать адрес возврата при вызове п/п В.
Для организации п/п большинство ЭВМ используют аппаратно поддерживаемую структуру данных, называемую стеком. Стек – это структура данных, организованная по принципу: последним вошел – первым вышел, т.е. последние записанные в стеке данные извлекаются из него первыми. В переводе с англ. stack – стопка. В ЭВМ для организации стека выделяется область оперативной памяти, а для ее адресации и доступа к стеку используется регистр – указатель стека. Указатель стека хранит адрес ячейки памяти, содержащей последнее помещенное в стек значение. При записи числа в стек указатель модифицируется так, чтобы он указывал на следующую свободную ячейку, и в нее вписываются данные. При извлечении из стека данные считываются из ячейки, на которую указывает указатель стека, затем указатель стека модифицируется так, чтобы указывать на предпоследнее запомненное значение. Обычно стеки растут в сторону уменьшения адресов, т.е. при записи числа указатель стека уменьшается, при извлечении – увеличивается.
При организации работы с п/п для сохранения адреса возврата используется стек. Команды вызова п/п CALL<адрес> работают следующим образом. Когда процессор считывает из памяти команду вызова п/п, программный счетчик увеличивается и показывает на команду, следующую за командой вызова п/п. С этой команды выполнение программы должно продолжиться после окончания работы п/п. Таким образом, программный счетчик после выборки команды вызова п/п содержит адрес возврата. При выполнении обращения к п/п процессор сохраняет содержимое программного счетчика в стеке. Адрес, с которого начинается п/п, вычисляется процессором по адресному полю команды вызова п/п и помещается в программный счетчик. Процессор приступает к выполнению п/п. Если п/п в процессе своей работы вызовет другую п/п, новое значение адреса возврата будет также включено в стек поверх старого адреса возврата.
Для возврата из п/п в основную программу служит команды возврата RETURN. Команды возврата из п/п извлекают из стека верхний элемент и помещают его в программный счетчик.
Прочие команды. В ЭВМ могут быть дополнительные команды. К их числу можно отнести команды остановки центрального процессора, сброса внешних устройств, установки и сброса отдельных признаков.
Дата добавления: 2016-04-02; просмотров: 1501;