Процес виклику підпрограми. Програмний стек

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

Коли здійснюється виклик підпрограми, точка повернення з неї запам'ятовується і зберігається до завершення роботи цієї підпрограми. Для збереження точки повернення використовується ділянка оперативної пам'яті. Крім того, під час виклику підпрограми певні ділянки пам'яті зіставляються з її параметрами та локальними змінними. Сукупність усіх цих ділянок пам'яті називається локальною пам'яттю підпрограми. Якщо підпрограма є функцією, то до її локальної пам'яті додається ділянка для збереження значення, яке функція повертає. Ця ділянка ставиться у відповідність до імені функції.

Сформулюємо алгоритм виклику підпрограми.

1. Для підпрограми виділяється локальна пам'ять.

2. В локальній пам'яті обчислюється й запам'ятовується точка повернення з підпрограми.

3. Обчислюються значення аргументів, що відповідають параметрам-значенням, і адреси аргументів, що відповідають параметрам-змінним. Здійснюється підстановка аргументів.

4. Виконуються оператори тіла підпрограми. Якщо підпрограма є функцією, то у локальній пам'яті запам'ятовується значення, яке функція повертає.

5. Здійснюється повернення з підпрограми. Якщо підпрограма є функцією, то з локальної пам'яті підпрограми до сегмента даних копіюється значення, яке функція повергає. Управління передається команді, що адресується точкою повернення з підпрограми.

6. Ділянка оперативної пам'яті, що була задіяна під локальну пам'ять, вважається вільною.

Виконання основної програми починається після завантаження її коду в опе­ративну пам'ять комп'ютера. При цьому відбувається виділення пам'яті для її змінних. Ці змінні доступні з програми протягом усього часу її виконання, і тому називаються статичними. Область пам'яті, що виділяється під програму та її змінні, також називається статичною. Під час виконання викликів підпрограм пам'ять виділяється та звільняється автоматично, без явних вказівок у програмі.

Виділення та звільнення ділянок пам'яті під час виконання викликів підпрограм відбувається за принципом «останнім прийшов — першим пішов». Якщо складати книжки в стопку і брати їх тільки зверху, то книжка, що потрапила у стопку останньою, забирається першою. Така стопка називається стеком (stack). Тому автоматична пам'ять, що виділяється для підпрограм, програм називається ще програмним стеком.