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
   245   246   247   248   249   250   251   252   253   254   255