Page 253 - 4503
P. 253

знизу  і  догори.  Те  саме  стосується  і    складання  та
           використання сіна у скирді.
                На  рисунку  8.4  показано  схему  реалізації  принципу
           магазину (принцип стеку). Коли за допомогою команди call
           відбулося звернення до підпрограми першого рівня, відбувся
           перший  запис  адреси  повернення  у  програму.  Коміркою  для
           цього  запису  є  регістр  магазину  №  0  (адреса  0000).  При
           зверненні  до  підпрограми  другого  рівня  команда  сall,
           повторно ініціює запис у стек (магазин). При цьому спрацює
           лічильник,  що  є  функціональною  частиною  стека.  Він
           збільшить  свій  вміст  на  одиницю,  а  отже,  до  попередньої
           комірки № 0 додасть 1, щоб отримати адресу наступної, ще не
           зайнятої  комірки  №  1.  На  схемі  8.4  показано,  що  запис  у
           комірки стеку (засилання) відбувається  при інкрементуванні
           лічильника.  Умовно  це  показано  рухом  за  годинниковою
           стрілкою.  Видобування  адреси    зі  стеку,  яке  за  принципом
           LIFO відбувається в напрямку від  останньої зайнятої комірки
           до комірки № 0, умовно показано проти годинникової стрілки.
           Програмно  видобування    адреси  зі  стеку  відбувається  за
           допомогою  команди  return,  яка  автоматично  ініціалізує
           декрементування  вмісту  лічильника.  Тож  перехід  на  адресу
           повернення  із  підпрограми  ааа  –  це  просто  зчитування
           адреси,  яка  була  записана  у  стек  раніше,  під  час  виконання
           чергової команди call ааа.
                Звернімо  увагу,  що  команда  call    є  адресною,  а
           return — безадресною. Адреса комірки, в яку відбувається
           засилання  у  стек,  завжди  на  одиницю  більша,  аніж  адреса
           комірки, з якої  відбувається видобувається зі стеку.
                Для прикладу на рисунку 8.4 штрихуванням відображені
           комірки  №  7  і  №  8.  Якщо  зайнятих  комірок  є  7,  то
           видобувається  вміст  із  регістра  №  7,  у  той  самий  час,  якщо
           зайнятих  є  сім  комірок,  то  заслати  дані  можна  тільки  у
           наступну  — № 8.


                                         253
   248   249   250   251   252   253   254   255   256   257   258