Лабораторная работа № 4
РАЗРАБОТКА И ОТЛАДКА МИКРОПРОГРАММЫ ВЫПОЛЕНИЯ ДЛИННОЙ АРИФМЕТИЧЕСКОЙ ОПЕРАЦИИ ДЕЛЕНИЯ
Рассмотрим выполнение операции деления дробных чисел без восстановления остатка, представленных в системе с фиксированной запятой в прямых кодах. Алгоритм выполнения операции приведен на рис. 15, а соответствующая микропрограмма – в табл. 9.
ВССА используются следующие обозначения: ЗнA, ЗнB и ЗнC – знаковые биты операндов A, B и результата C; Am, Bm и Cm – модули операндов и результата; Ост – остаток от деления; Ост, Cm – логический левый сдвиг Ост, Cm на один разряд; СчЦ – счётчик циклов; СчЦ – логический левый сдвиг счетчика циклов на один разряд.
В микропрограмме делимое А размещается в регистре РОН0, делитель В – в регистре РОН1. Остальные регистры распределены следующим образом: Р0Н2 – задействован при проведении промежуточных преобразований и для размещения конечного результата; РОН3 – для хранения константы вида 10…0; РОН4 – для хранения значения счетчика циклов, РОН5 – для хранения значения остатка деления, РОН6 – для хранения значения ЗнC; РР – для хранения промежуточных значений, РРР – для конечного сообщения об ошибках.
Таблица 9
Микропрограмма деления без восстановления остатка
Адрес |
Микроинструкция |
Комментарий |
1 |
2 |
3 |
000 |
РОН0 := ШИНвх |
Ввод операнда A |
001 |
РОН1 := ШИНвх |
Ввод операнда B |
002 |
РР := !П (П=1) |
РР = 00...0 |
003 |
РР := СЦП(РР + П) (П = 1) |
РР = 10...0 |
004 |
РОН3 := РР + П (П = 0) |
Формирование константы 10...0 |
005 |
РР := !РОН1 + П (П = 1) |
Если ПАЛУ3, то 6 иначе 7 (Проверка B = 0) |
006 |
РРР := !П (П = 0) |
Идти к 49 (Сообщение "Ошибка") |
007 |
РР := !РОН3 + П (П = 0) |
РР = 01..1 |
008 |
РР := РОН0 and РР |
Выделение Am |
009 |
РОН5 := РР + П (П = 0) |
Сохранение Am |
010 |
РР := !РОН3 + П (П = 0) |
РР = 01...1 |
011 |
РР := РОН1 and РР |
Выделение Bm |
012 |
РР := РОН5 РР 1 + П (П = 1) |
РР = Am Bm |
013 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДЛ1, то 6 иначе 14 (Проверка A < B) |
014 |
РР := РОН0 + П (П = 0) |
Пересылка операнда A в РР |
015 |
РР := РОН1 xor РР |
Суммирование операндов по mod2 |
016 |
РР := РОН3 and РР |
Формирование ЗнC |
017 |
РОН6 := РР + П (П = 0) |
Сохранение ЗнС |
018 |
РР := !РОН3 + П (П = 0) |
РР = 01...1 |
019 |
РОН1 := РОН1 and РР |
Сохранение Bm |
020 |
РР := РОН5 + П (П = 0) |
Пересылка Am в РР |
021 |
РР := РР РОН1 1 + П (П = 1) |
Ост = Am Bm |
022 |
РОН5 := РР + П (П = 0) |
Сохранение Ост |
Окончание табл. 9
1 |
2 |
3 |
023 |
РР := !П (П = 1) |
РР = 00...0 |
024 |
РР := СЛЛ(РР + П) (П = 1) |
РР = 0...10 |
025 |
РОН4 := РР + П (П = 0) |
Установка СчЦ |
026 |
РР := РОН5 + П (П = 0) |
Пересылка Ост в РР |
027 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДЛ1, то 35 иначе 28 (Проверка ЗнОст) |
028 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР |
029 |
РР := СЛЛ(РР + П) (П = 0) |
Сдвиг Cm влево |
030 |
РОН2 := РР + П (П = 0) |
Сохранение Cm |
031 |
РР := РОН5 + П (П = 0) |
Пересылка Ост в РР |
032 |
РР := СЛЛ(РР + П) (П = 0) |
Сдвиг Ост влево |
033 |
РР := РОН1 + РР + П (П = 0) |
РР = Ост Bm |
034 |
РОН5 := РР + П (П = 0) |
Идти к 43 (Сохранение Ост) |
035 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР |
036 |
РР := РР + П (П = 1) |
Cm = Cm 1 |
037 |
РР := СЛЛ(РР + П) (П = 0) |
Сдвиг Cm влево |
038 |
РОН2 := РР + П (П = 0) |
Сохранение Cm |
039 |
РР := РОН5 + П (П = 0) |
Пересылка Ост в РР |
040 |
РР := СЛЛ(РР + П) (П = 0) |
Сдвиг Ост влево |
041 |
РР := РР РОН1 1 + П (П = 1) |
РР = Ост Bm |
042 |
РОН5 := РР + П (П = 0) |
Сохранение Ост |
043 |
РР := РОН4 + П (П = 0) |
Пересылка СчЦ в РР |
044 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДЛ1, то 45 иначе 46 (Проверка СчЦ = 0) |
045 |
РОН4 := РР + П (П = 0) |
Идти к 26 (Сохранение СчЦ) |
046 |
РР := РОН6 + П (П = 0) |
Пересылка ЗнС в РР |
047 |
РОН2 := РОН2 or РР |
С = ЗнC Cm |
048 |
РРР := !П (П = 1) |
Сообщение "Ошибки нет" |
049 |
ШИНвых := РРР + П (П = 0) |
Вывод сообщения |
050 |
ШИНвых := РОН2 |
Вывод С, "Конец" |