52
9.2. Реализация вызова подпрограмм и возврата в
основную программу
Адрес ячейки памяти , на которую следует возвратиться из после выпол-
нения подпрограммы , становится известным в момент обработки процессо -
ром команды ВЫЗОВ ПОДПРОГРАММЫ. Фактически это адрес команды , сле-
дующей за командой вызова подпрограммы . Мы знаем, что в момент после
выборки этой команды из памяти в регистр команд процессора адрес, нахо-
дящийся в это время в регистре–счетчике команд процессора , является адре -
сом следующей по порядку команды . Другими словами , в момент, когда
процессор приступает к интерпретации команды вызова подпрограммы ,
нужный нам адрес возврата из подпрограммы находится в регистре-
счетчике команд процессора . Поэтому вполне естественным для обеспече-
ния в процессе выполнения команды ВЫЗОВ ПОДПРОГРАММЫ возможности
правильного возврата из этой подпрограммы является предварительное со -
хранение в определенном месте текущего содержимого счетчика команд
(адреса возврата) перед тем, как оно будет замещено адресом начала подпро -
граммы . Теперь для возврата из подпрограммы можно использовать этот
предварительно сохраненный адрес возврата.
Следующим важным вопросом, который должен быть решен, является
определение места, в котором должен быть сохранен адрес возврата из под-
программы . При этом следует учесть, что если мы хотим реализовать воз-
можность использования вложенных подпрограмм, то , во-первых, мы долж-
ны запоминать не один адрес возврата , а адреса возврата из каждой вызы -
ваемой подпрограммы , и , во-вторых, чтобы не нарушать логику программы ,
сохраненные адреса возврата должны извлекаться для использования в по -
рядке , противоположном порядку их запоминания при последовательном
входе во вложенные подпрограммы .
Таким местом , в котором удобно осуществлять запоминание адресов
возврата, является стек. Собственно необходимость реализации механизма
работы с подпрограммами и является причиной (хотя и не единственной)
введения в архитектуру ЭВМ памяти , организованной в виде стека.
Представляя собой запоминающую структуру с одной точкой входа-
выхода – вершиной стека, стек позволяет естественным образом решить
проблему запоминания адреса возврата (засылка в стек) при вызове подпро -