Содержимое счетчика в любое время может быть считано через
DMD шину, само содержимое при этом не изменяется. При считывании
счетчика два старших бита DMD шины заполняются нулями.
Для реализации вложенных циклов с счетчиком связан стек (COUNT
STACK, см. рис. 1.9), который может хранить четыре (максимальное
число вложенных циклов) 14-битных слова. Когда счетчик загружается
новым значением с DMD шины (например, выполняется оператор CNTR
= N;), текущее содержимое счетчика циклов автоматически загружается в
стек счетчика. Стек счетчика автоматически считывается, когда в конце
очередного цикла флаг СЕ принимает единичное значение, т.е.
исчерпывается число необходимых циклов. Если необходим экстренный
выход из циклов до исчерпания их числа, то стек может быть считан
вручную.
В двух случаях автоматическое сохранение текущего значения
счетчика циклов в стеке не производится. Их можно отнести к
исключениям из общего правила. Первое исключение возникает, когда
указатель стека счетчика содержит недействительное число. Это может
случиться после сброса процессора или, когда была предпринята
проверка СЕ с положительным исходом, а стек счетчика был пуст. Пустое
состояние стека счетчика отражается битом 2 регистра SSTAT (см. п.
1.10).
Второе исключение возникает при использовании имени регистра
OWRCNTR (OverWRite CouNTeR – перезапись счетчика). Запись в этот
регистр перезаписывает содержимое счетчика циклов без сохранения его
текущего значения в стек счетчика. OWRCNTR не может быть считан и
не должен записываться в последней команде цикла DO UNTIL.
Компаратор циклов и его стек. С помощью компаратора циклов
(LOOP COMPARATOR, см. рис. 1.9) программный конвейер
обеспечивает переход в начало тела цикла без потери времени на
определение окончания тела цикла.
В каждом машинном цикле компаратор циклов сравнивает
следующий адрес, сформированный программным конвейером, с адресом
последней команды тела цикла (адрес метки, указанной в операторе DO
UNTIL, например, cycles в предыдущем примере). Адрес первой команды
тела цикла хранится в вершине РС стека. Когда выполнится последняя
команда тела цикла, процессор выполнит условный переход в начало тела
цикла без дополнительных затрат времени на определение конца тела
цикла.
Стек циклов (LOOP STACK, см. рис. 1.9) запоминает адреса
последних команд и условий выхода из вложенных циклов, которых
может быть до четырех. Единственный дополнительный машинный цикл,
связанный с вложением циклов DO UNTIL необходим для выполнения
самой команды DO UNTIL, поскольку загрузка стеков, связанных с
реализацией циклов (COUNT STACK, LOOP STACK) выполняется
аппаратно.