ЭУМК по дисциплине "Проектирование проблемно-ориентированных вычислительных средств" › Теория › Тема 4. Управляющее устройство процессоров платформы с5000

# Электронный учебно-методический
комплекс по дисциплине
"Проектирование проблемно-ориентированных вычислительных средств"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

4.2. Организация повторения групп команд
4.2.1. Организация повторения блока команд

Команды повторения блока команд используются, чтобы повторить программный блок N + 1 раз, где N - значение, загруженное в регистр счетчика повторения блока (BRC). Этот программный блок может содержать одну или более команд. В отличие от повторения одиночной команды, которая запрещает все маскируемые прерывания, операция повторения блока может быть прервана.
Для этой операции используются команды RPTB и RPTBD (задержанная команда). Машинная команда RPTB выполняется за 4 цикла. RPTBD позволяет выполнить одну команду длиной два слова или две команды длиной одно слово, расположенные после машинной команды RPTBD вместо того, чтобы сбросить конвейер; таким образом, команда RPTBD эффективно выполняется за 2 цикла. Когда используется команда RPTBD, в следующих двух словах после команды не может быть задержанных команд.
Особенностью команды повторения блока является отсутствие дополнительных тактов в цикле. Повторением цикла управляет флажок активности повторения блока (BRAF) в ST1 и следующие регистры с отображением на память:

- счетчика повторения блока (BRC) содержит значение N, которое на 1 меньше чем число раз, сколько блок должен быть повторен.
- регистр начального адреса повторяемого блока (RSA) содержит адрес первой машинной команды повторяемого блока программы.
- регистр конечного адреса повторяемого блока (REA) содержит адрес последнего слова последней машинной команды повторяемого блока программы.

Флажок активности повторения блока BRAF устанавливается в 1 для активации повторения блока. Особенность процедуры повторения блока в том, что она может быть активирована, только если число итераций больше чем 0. Следующие шаги запускают цикл:
Шаг 1: Загружается BRC счетчиком повторения в диапазоне от 0 до 65 535.
Шаг 2: Команда загружает адрес первой команды, которая будет повторяться. Это команда – следующая сразу после RPTB или вторая (третья, если две команды имели длину по одному слову) после команды RPTBD. Команда повторения блока автоматически загружает RSA адресом этой первой повторяемой команды.
Шаг 3: Команда загружает REA адресом последнего слова последней машинной команды, которая будет повторена в блоке, который является 16-разрядным непосредственным операндом, заданным команде. При этом также устанавливается бит BRAF. Значение для 16-разрядного непосредственного операнда RPTB или RPTBD равно L - 1, где L - адрес команды после последнего слова последней команды в цикле.
Каждый раз, когда PC обновляется во время выполнения цикла, REA сравнивается со значением PC. Если значения равны, BRC уменьшается на 1. Если BRC больше или равен 0, RSA загружается в PC, чтобы перезапустить цикл. В противном случае BRAF сбрасывается в 0 и процессор возобновляет выполнение команд после конца цикла.

4.2.1. Формат команды повторения блока

Синтаксис | Выражение (операция) | С | Ц | Зависит | Влияет
RPTB[D] pmad {[d]blockrepeat(pmad)} | Повторение блока команд RSA=PC+2[4¶], REA=pmad, BRAF=1 | 2 | 4 2¶ |  | BRAF↑

4.2.3. Особенности повторения блока команд

Регистр BRC уменьшается на 1 во время фазы декодирования последней повторяемой команды. Поэтому будьте внимательны, используя машинную команду SRCCD в пределах цикла. Чтобы сохранить текущее значение счетчика цикла BRC (до вычитания единицы), команда SRCCD должна располагаться минимум за три слова до конца цикла.
Есть только один набор регистров повторения блока, таким образом, несколько команд повторения блока не могут быть вложены без сохранения контекста внешних циклов. Самый простой способ установить вложенные циклы состоит в том, чтобы использовать машинную команду RPTB[D] только для самого внутреннего цикла, и использовать команду BANZ[D] для всех внешних циклов.
Данную команду также не рекомендуется использовать в процедурах обработки прерываний.

Оглавление | Программа | Теория| Практика | Контроль знаний | Об авторах
© БГУИР , 2012