Подпрограммы. Использование стека при вызове подпрограмм и возврате из них

Проблемы реализации подпрограмм

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

Логика перехода к подпрограмме и возврата из нее

Рис. 10.1. Логика перехода к подпрограмме и возврата из нее

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

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

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

Вложенные подпрограммы

Рис. 10.2. Вложенные подпрограммы

86

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

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >