Page 250 - 4503
P. 250
Як бачимо, в тілі основної програми (програма) вписана
команда call, що приводить до виклику модуля
(підпрограма), яка у свою чергу має вмонтовану у себе
команду return, котра забезпечує перехід назад у програму
(знову програма). Перехід із основної програми до тієї самої
підпрограми може виконуватись неодноразово.
Перехід до будь–якої підпрограми вимагатиме
вказування її розміщення, тобто адреси. Ця адреса ааа, як
бачимо з таблиці 8.1, є операндом команди call.
У результаті наприклад команди call h’12F’, у
лічильник адреси запишеться нова адреса — h’12F’. У той
самий час попередню адресу, яка з’явилась у лічильнику
програм РС завдяки збільшенню на одиницю адреси поточної
команди, слід кудись тимчасово записати (покласти на
тимчасове зберігання).
Навіщо? Для того, щоб після завершення підпрограми
повернутися назад у програму (знову програма), саме в ту її
команду, адресу котрої перед командою сall сформував РС.
Для тимчасового зберігання цієї останньої (невиконаної)
команди слугує спеціальний функціональний вузол — буфер
типу магазин, або інакше стек. З логічної точки зору стек —
це той самий регістр.
Таким чином, за наявності такого регістру, за кожного
застосування команди call ааа, яка є наступною після
певної команди основної програми за адресою n,
виконуватиметься перша команда підпрограми, адреса котрої
ааа. У момент виконання цієї підпрограми в буфері
зберігатиметься адреса n+1, тобто адреса команди, куди саме
слід повернутися завдяки безадресній команді return.
8.3.1 Вкладені підпрограми
250