Применение счетчика глубины рекурсии
Вместо пересылки чисел (параметров) при переходе от одной подпрограммы к другой, подчиненной первой, как это описывается ниже, указанный прием позволяет ограничиться передачей адресов переменных с использованием косвенной адресации. Применение в машинах такого схемного приема, по-видимому, будет получать все большее распространение в. связи с возрастающей ролью рекурсивных процессов и рекурсивного использования подпрограмм.
Допустим, что в структуру устройства управления «полуадресной» машины добавлены два специальных счетчика, фиксирующих число последовательно подчиненных друг другу подпрограмм (глубину рекурсии). Назовем один из них абсолютным счетчиком глубины рекурсии PSHC (Permanent Subroutine Hierachy Counter), а другой текущим счетчиком глубины рекурсии TSHC (Temporary Subroutine Hierarchy Counter). Признаком их использования для изменения адресов будет: () для PSHC и (!) для TSHS.
По команде «jump» — передачи управления на подпрограмму самую младшую, т. е. глубокую, в цепочке подчиненных друг другу подпрограмм, содержимое обоих счетчиков увеличивается на единицу. По команде «ret» — возврат с младшей подпрограммы на более старшую, содержимое обоих счетчиков уменьшается на единицу. Перед началом выполнения программы оба счетчика устанавливаются на нуль. В любой момент значение PSHC будет указывать глубину, на которой выполняются команды. Даже если этот процесс рекурсивен (встречаются передачи управления с данной подпрограммы на более старшую), значение счетчика PSHC укажет истинную глубину, как бы сложен ни был путь, по которому производилась работа.
В обычных условиях значение счетчика TSHC равно значению счетчика PSHC. Содержимое счетчика PSHC соответствует значению индекса на блок-схеме.
Источник: delete-it