Мікрокоманду
{ rfct; } \ повторити цикл за адресою з верхівки стека, якщо
\ (РА/ЛЦ) ¹0
використовують для багаторазового повторення певної частини мікропрограми, для якої відома кількість повторень. Цю кількість повторень перед початком циклу записують в РА/ЛЦ за допомогою мікрокоманди
{ push cond, val; }. При цьому в стек записується адреса початку циклу. Слід зазначити, що val має дорівнювати кількості виконань циклу мінус один.
Після виконання тіла циклу, яке завершується мікрокомандою { rfct; }, аналізується вміст РА/ЛЦ. Якщо (РА/ЛЦ) ¹ 0, то здійснюється перехід на початок циклу (за адресою зі стека), а значення в РА/ЛЦ зменшується на 1. Повторення циклу відбувається, поки (РА/ЛЦ) ¹ 0.
Якщо (РА/ЛЦ) = 0, то здійснюється перехід до наступної мікрокоманди й виштовхування зі стека.
Механізм виконання мікрокоманди
{ rpct addr; } \ повторити цикл за адресою addr, якщо (РА/ЛЦ) ¹0
відрізняється від попереднього тим, що в цій мікрокоманді перехід відбувається не за адресою з верхівки стека, а за адресою addr з поля P мікрокоманди через Буфер Р.
Приклад мікрокоманди:
{ rpct mark1; }
Якщо цикл має змінну, заздалегідь невідому кількість повторень, то для контролю кінця циклу застосовують мікрокоманду
{ loop cond; } \ вийти з циклу, якщо умова виконується (cond = 1).
Таблиця 8
Система мікрокоманд формувача адрес мікрокоманд
Розряди поля ФАМ_МІ | Мнемоніка | Призначення мікрокоманди | |||
JZ | Перехід до нульової адреси | ||||
CJS cond, addr | Виклик мікропідпрограми за адресою addr, якщо cond=1 | ||||
JMAP | Безумовний перехід за адресою, що знаходиться на ЛШ (через Буфер М) | ||||
CJP cond, addr | Перехід з адресою addr (за адресою з поля P через Буфер Р), якщо cond=1 | ||||
PUSH cond, val | Запис у стек адреси наступної мікрокоманди й умовне завантаження РА/ЛЦ значенням val (якщо cond=1) | ||||
JSRP cond, addr | Виклик однієї з двох мікропідпрограм: за адресою addr (якщо cond = 1); за адресою з РА/ЛЦ (якщо cond = 0) | ||||
CJV cond | Перехід за адресою з Буфера V, якщо cond=1 | ||||
JRP cond, addr | Перехід: за адресою addr, якщо cond = 1; за адресою з РА/ЛЦ, якщо cond = 0 | ||||
RFCT | Повторити цикл за адресою з верхівки стека, якщо (РА/ЛЦ)¹0 | ||||
RPCT addr | Повторити цикл за адресою addr (з поля Р через Буфер Р), якщо (РА/ЛЦ)¹0 | ||||
CRTN cond | Повернення з мікропідпрограми за адресою з верхівки стека, якщо cond=1 | ||||
CJPP cond, val | Перехід за адресою addr (через Буфер Р) і виштовхування зі стека, якщо cond=1 | ||||
LDCT val | Запис в РА/ЛЦ значення val (з поля Р через Буфер Р) | ||||
LOOP cond | Контроль кінця циклу: якщо cond = 1, то вийти з циклу (перейти до наступної мікрокоманди), інакше перейти на початок циклу за адресою з верхівки стека | ||||
CONT | Перехід до наступної мікрокоманди | ||||
TWB cond, addr | Розгалуження на три напрями: якщо (РА/ЛЦ)¹0 і cond=1 або (РА/ЛЦ)=0 і |
продовження табл. 8
Розряди поля ФАМ_МІ | Мнемоніка | Призначення мікрокоманди |
3 2 1 0 | ||
cond=0, то перейти за адресою addr (через Буфер P) і виштовхнути зі стека; якщо (РА/ЛЦ)¹0 і cond=0, то перейти за адресою з верхівки стека; якщо (РА/ЛЦ)=0 і cond=1, то перейти до наступної мікрокоманди |
Мікрокоманда { loop cond; } має завершувати тіло циклу. Якщо cond = 0, то здійснюється перехід на початок циклу (за адресою з верхівки стека), інакше здійснюється перехід до наступної мікрокоманди (за межі циклу) і виштовхування зі стека.
Приклад мікрокоманди:
{ loop rm_z; } \ вийти з циклу, якщо M.Z = 1.
Організувати цикл із заданою (фіксованою) кількістю повторень можна в такий спосіб:
Організувати цикл зі змінною кількістю повторень можна таким чином:
У мікрокоманді
{ twb cond, addr; } \ розгалуження на три напрями
аналізуються дві умови: cond (явно вказана в мікрокоманді) та вміст РА/ЛЦ (порівнюється з нулем).
Якщо (РА/ЛЦ)¹0 і cond=0, то здійснюється перехід за адресою з верхівки стека (А:= (стек)) і вміст РА/ЛЦ зменшується на 1.
Якщо (РА/ЛЦ)¹0 і cond=1 або (РА/ЛЦ)=0 і cond=0, то здійснюється перехід за адресою addr (через Буфер P) і виштовхування зі стека (A:=addr). Якщо при цьому (РА/ЛЦ)¹0, то одночасно вміст РА/ЛЦ зменшується на 1. Якщо (РА/ЛЦ)=0 і cond=1, то здійснюється перехід до наступної адреси (A:=(ЛМК)). Приклад мікрокоманди:
{ twb not rn_c, label3; }
Мікрокоманду TWB також можна використовувати для організації циклів із заданою кількістю повторень: