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