Група 3. Мікрокоманди для організації циклів

Мікрокоманду

{ 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 також можна використовувати для організації циклів із заданою кількістю повторень:

 
 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: