Лабораторная работа № 2
РАЗРАБОТКА И ОТЛАДКА МИКРОПРОГРАММЫ ВЫПОЛНЕНИЯ КОРОТКОЙ АРИФМЕТИЧЕСКОЙ ОПЕРАЦИИ ВЫЧИТАНИЯ
Рассмотрим вариант выполнения операции вычитания дробных двоичных чисел фиксированного формата, представленных в дополнительных кодах в системе с фиксированной запятой. На рис. 11 приведена ССА вычитания, в которой прямое вычитание заменяется суммированием при условии изменения знака уменьшаемого на обратный. В ССА используются следующие обозначения: ЗнA, ЗнB, ЗнC – знаковые биты операндов A, B и результата C.
Микропрограмма, отображающая рассмотренный алгоритм, представлена в табл. 4. В этой микропрограмме операнды А и В размещены соответственно в регистрах РОН0 и РОН1. Регистр РОН2 – задействован при проведении промежуточных преобразований и для размещения конечного результата операции при отсутствии переполнения. Регистр РР используется для хранения промежуточных значений. Регистр РРР используется для конечного сообщения об ошибках.
Таблица 4
Микропрограмма вычитания чисел
Адрес |
Микроинструкция |
Комментарий |
000 |
РОН0 := ШИНвх |
Ввод операнда A |
001 |
РОН1 := ШИНвх |
Ввод операнда B |
002 |
РР := !РОН0 + П (П = 1) |
Если ПАЛУ3, то 15 иначе 3 (Проверка A = 0) |
003 |
РР := !РОН1 + П (П = 1) |
Если ПАЛУ3. то 17 иначе 4 (Проверка B = 0) |
004 |
РОН1 := !РОН1 + П (П = 1) |
Формирование доп. кода операнда В |
005 |
РР := РОН1 + П (П = 0) |
Пересылка операнда В в РР |
006 |
РР := РОН0 + РР + П (П = 0) |
С = A (B) |
007 |
РОН2 := РР + П (П = 0) |
Сохранение результата C |
008 |
РР := РОН0 + П (П = 0) |
Пересылка операнда А в РР |
009 |
РР := РОН1 xor РР |
Суммирование операндов по mod2 |
010 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДЛ1, то 11 иначе 19 (Проверка знаков операндов) |
011 |
РР := РОН0 + П (П = 0) |
Пересылка операнда А в РР |
012 |
РР := РОН2 xor РР |
Суммирование операнда A и результата C по mod2 |
013 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДЛ1, то 19 иначе 14 (Проверка ЗнC = ЗнA) |
014 |
РРР := !П (П = 0) |
Идти к 20 (Сообщение "Переполнение") |
015 |
РР := !РОН1 + П (П = 1) |
Формирование доп. кода операнда B |
016 |
РОН2 := РР + П (П = 0) |
Идти к 19 (Сохранение результата C) |
017 |
РР := РОН0 + П (П = 0) |
Пересылка операнда A в РР |
018 |
РОН2 := РР + П (П = 0) |
Сохранение операнда A |
019 |
РРР := !П (П = 1) |
Сообщение "Переполнения нет" |
020 |
ШИНвых := РРР + П (П = 0) |
Вывод сообщения |
021 |
ШИНвых := РОН2 |
Вывод С, "Конец" |
Лабораторная работа № 3
РАЗРАБОТКА И ОТЛАДКА МИКРОПРОГРАММЫ ВЫПОЛЕНИЯ ДЛИННОЙ АРИФМЕТИЧЕСКОЙ ОПЕРАЦИИ УМНОЖЕНИЯ
Пример 1. В качестве длинной арифметической операции возьмём перемножение двух дробных двоичных чисел байтового формата, представленных в системе с фиксированной запятой в прямых кодах. Результат операции будем округлять путём отбрасывания младших разрядов, выдвигаемых за пределы разрядной сетки. Операцию будем выполнять по методу умножения младшими разрядами вперёд со сдвигом множителя и сумматора вправо. ССА вычитания приведена на рис. 12, где используются следующие обозначения: ЗнA, ЗнB и ЗнC – знаковые биты операндов A и B и результата C; СчЦ – счётчик циклов; Am, Bm и Cm – модули операндов и результата;Bm, Cm – логический правый сдвиг Bm, Cm на один разряд;СчЦ – логический левый сдвиг счетчика циклов на один разряд.
Микропрограмма выполнения операции представлена в табл. 5. Множимое А размещается в регистре РОН0, множитель В – в регистре РОН1. Сумма частичных произведений и конечный результат операции хранится в регистре РОН2, в регистре РОН3 хранится константа вида 10...0, в регистре РОН4 организован счётчик циклов, в регистре РОН5 хранится ЗнС. Регистр РР используется для хранения промежуточных значений.
Таблица 5
Микропрограмма умножения чисел
Адрес |
Микроинструкция |
Комментарий |
1 |
2 |
3 |
000 |
РОН0 := ШИНвх |
Ввод операнда А |
001 |
РОН1 := ШИНвх |
Ввод операнда В |
002 |
РР := !РОН0 + П (П = 1) |
Если ПАЛУ3, то 29 (Проверка A = 0) |
003 |
РР := !РОН1 + П (П = 1) |
Если ПАЛУ3, то 29 (Проверка B = 0) |
004 |
РР := !П (П = 1) |
РР = 00...0 |
005 |
РР := СЦП(РР + П) (П = 1) |
РР = 10...0 |
006 |
РОН3 := РР + П (П = 0) |
Формирование в константы 10...0 |
007 |
РР := РОН0 + П (П = 0) |
Пересылка операнда А в РР |
008 |
РР := РОН1 xor РР |
Суммирование операндов по mod2 |
009 |
РР := РОН3 and РР |
Формирование ЗнС |
010 |
РОН5 := РР + П (П = 0) |
Сохранение ЗнС |
011 |
РОН2 := !П (П = 1) |
Сm = 00...0 |
012 |
РР := !П (П = 1) |
РР = 00...0 |
013 |
РР := СЛЛ(РР + П) (П = 1) |
РР = 0...10 |
014 |
РОН4 := РР + П (П = 0) |
Установка СчЦ |
015 |
РР := РОН3 + П (П = 0) |
РР = 10...0 |
016 |
РОН0 := РОН0 and !РР |
Сохранение Am |
017 |
РР := РОН1 + П (П = 0) |
Пересылка операнда B в РР |
018 |
РР := СЛП(РР + П) (П = 0) |
Если !СДП1, то 24 иначе 19 (Проверка значения b0) |
019 |
РОН1 := РР + П (П = 0) |
Сохранение операнда В |
020 |
РР := РОН0 + П (П = 0) |
Пересылка Am в РР |
021 |
РР := РОН2 + РР + П (П = 0) |
Сm = Сm Am |
022 |
РР := СЛП(РР + П) (П = 0) |
Сдвиг Cm вправо |
023 |
РОН2 := РР + П (П = 0) |
Идти к 26 (Сохранение Cm) |
024 |
РОН1 := РР + П (П = 0) |
Сохранение операнда B |
025 |
РР := РОН2 + П (П = 0) |
Идти к 22 (Пересылка Cm в РР) |
026 |
РР := РОН4 + П (П = 0) |
Пересылка СчЦ в РР |
Окончание табл. 5
1 |
2 |
3 |
027 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДП1, то 28 иначе 30 (Проверка СчЦ = 0) |
028 |
РОН4 := РР + П (П = 0) |
Идти к 17 (Сохранение СчЦ) |
029 |
РОН2 := !П (П = 0) |
Идти к 32 (С = 0) |
030 |
РР := РОН5 + П (П = 0) |
Пересылка ЗнС в РР |
031 |
РОН2 := РОН2 or РР |
C = ЗнC Cm |
032 |
ШИНвых := РОН2 |
Вывод С, "Конец" |
Пример 2. Одним из вариантов ускоренной реализации операции умножения является косвенное выполнение умножения с использованием таблицы квадратов чисел. Структурная схема алгоритма выполнения операции приведёна на рис. 13.
Алгоритм предусматривает для чисел в прямых кодах преобразование формулы (a b)2 = a2 b2 2ab к виду ab = ((a b)2 – a2 – b2)/2, что даёт возможность использовать операции суммирования, вычитания, табличного возведения в квадрат и логического сдвига вправо вместо прямого умножения.
Вструктурной схеме алгоритма используются следующие обозначения: ЗнA, ЗнB и ЗнC – знаковые биты операндов A и B и результата C; Am, Bm и Cm – модули операндов и результата;Cm – логический правый сдвиг Cm на один разряд.
В микропрограмме (табл. 6) предполагается размещение операндов А и В соответственно в регистрах РОН0 и РОН1. Остальные регистры распределены следующим образом: РОН2, РОН3 – для выполнения требуемых преобразований и размещения конечного результата; РОН4 – для хранения константы вида 10…0, РОН5 – для хранения ЗнC; РОН6, РОН7, РР используются для хранения промежуточных результатов.
Таблица квадратов занимает в табличном преобразователе (ТП) 2n ячеек разрядностью 2n каждая (n ≤ 16).
Таблица 6
Микропрограмма ускоренного умножения (метод квадратов)
Адрес |
Микроинструкция |
Комментарий |
1 |
2 |
3 |
000 |
РОН0 := ШИНвх |
Ввод операнда A |
001 |
РОН1 := ШИНвх |
Ввод операнда B |
002 |
РР := !РОН0 + П (П = 1) |
Если ПАЛУ3, то 4 иначе 3 (Проверка A = 0) |
003 |
РР := !РОН1 + П (П = 1) |
Если ПАЛУ3, то 4 иначе 6 (Проверка B = 0) |
004 |
РОН2 := !П (П = 1) |
Ch = 00...0 (Старшая часть C) |
005 |
РОН3 := !П (П = 1) |
Идти к 47 (Cl = 00…0 – младшая часть С) |
006 |
РР := !П (П = 1) |
РР = 00...0 |
007 |
РР := РР + П (П = 1) |
РР = 00...1 |
008 |
РР := СЦП(РР + П) (П = 0) |
РР = 10...0 |
009 |
РОН4 := РР + П (П = 0) |
Формирование константы 10...0 |
010 |
РР := РОН0 + П (П = 0) |
Пересылка операнда A в РР |
011 |
РР := РОН1 xor РР |
Суммирование операндов по mod2 |
012 |
РР := РОН4 and РР |
Формирование ЗнC |
013 |
РОН5 := РР + П (П = 0) |
Сохранение ЗнC |
014 |
РР := РОН4 + П (П = 0) |
РР = 10...0 |
015 |
РОН0 := РОН0 and !РР |
Сохранение Am |
Продолжение табл. 6
1 |
2 |
3 |
016 |
РР := РОН4 + П (П = 0) |
РР = 10...0 |
017 |
РОН1 := РОН1 and !РР |
Сохранение Bm |
018 |
РР := РОН0 + П (П = 0) |
Пересылка Аm в РР |
019 |
РР := РОН1 + РР + П (П = 0) |
РР = Am + Bm |
020 |
ШИНвых := РР + П (П = 0) |
Запрос (Am Bm)2 |
021 |
РОН3 := ШИНвх |
Ввод Cl = ((Am Bm)2)ml (младшая часть) |
022 |
РОН2 := ШИНвх |
Ввод Ch = ((Am Bm)2)mh (старшая часть) |
023 |
ШИНвых := РОН0 |
Запрос (Am)2 |
024 |
РОН7 := ШИНвх |
Ввод ((Am)2)ml (младшая часть) |
025 |
РОН6 := ШИНвх |
Ввод ((Am)2)mh (старшая часть) |
026 |
РР := РОН7 + П (П = 0) |
Пересылка ((Am)2)ml в РР |
027 |
РОН3 := РОН3 – РР – 1 + П (П = 1) |
Если ПАЛУ3, то 28 иначе 30 (Cl = Cl – ((Am)2)ml) |
028 |
РР := РОН6 + П (П = 0) |
Пересылка ((Am)2)mh в РР (вычитание без заёма из старшей части) |
029 |
РОН2 := РОН2 – РР – 1 + П (П = 1) |
Идти к 32 (Ch = Ch – ((Am)2)mh) |
030 |
РР := РОН6 + П (П = 0) |
Пересылка ((Am)2)mh в РР (вычитание с заёмом из старшей части) |
031 |
РОН2 := РОН2 – РР – 1 + П (П = 0) |
Ch = Ch – ((Am)2)mh |
032 |
ШИНвых := РОН1 |
Запрос (Bm)2 |
033 |
РОН7 := ШИНвх |
Ввод ((Bm)2)ml (младшая часть) |
034 |
РОН6 := ШИНвх |
Ввод ((Bm)2)mh (старшая часть) |
035 |
РР := РОН7 + П (П=0) |
Пересылка ((Bm)2)ml в РР |
036 |
РОН3 := РОН3 – РР – 1 + П (П = 1) |
Если ПАЛУ3, то 37 иначе 39 (Cl = Cl – ((Bm)2)ml) |
037 |
РР := РОН6 + П (П = 0) |
Пересылка ((Bm)2)mh в РР (вычитание без заёма из старшей части) |
038 |
РОН2 := РОН2 – РР – 1 + П (П = 1) |
Идти к 41 (Ch = Ch – ((Bm)2)mh) |
Окончание табл. 6
1 |
2 |
3 |
039 |
РР := РОН6 + П (П = 0) |
Пересылка ((Bm)2)mh в РР (вычитание c заёмом из старшей части) |
040 |
РОН2 := РОН2 – РР – 1 + П (П = 0) |
Ch = Ch – ((Bm)2)mh |
041 |
РР := РОН2 + П (П = 0) |
Пересылка в Ch в РР |
042 |
РРР := РОН3 |
Пересылка в Cl в РРР |
043 |
(РР, РРР) := СЛП(РР + П, РРР) (П = 0) |
Сдвиг Cm вправо |
044 |
РР := РОН5 or РР |
Ch = ЗнС Ch |
045 |
РОН2 := РР + П (П = 0) |
Сохранение Ch с учётом знака |
046 |
РОН3 := РРР + П (П = 0) |
Сохранение Cl |
047 |
ШИНвых := РОН3 |
Вывод Cl |
048 |
ШИНвых := РОН2 |
Вывод Сh, "Конец" |
Пример 3. Рассмотрим выполнение операции умножения дробных чисел, представленных в системе с фиксированной запятой в прямых модифицированных кодах, программным ускоренным методом. Сущность метода раскрывается в табл. 7, где введены следующие обозначения: b1, b0 – два младших разряда модуля множителя Вm; Р – значение бита переноса из предыдущей пары разрядов множителя до операции; Р1 – значение бита переноса из предыдущей пары разрядов множителя после операции; Cm – текущее значение суммы частичных произведений; Аm – модуль множимого.
Таблица 7
Операции в цикле программного ускоренного умножения
b1 |
b0 |
P |
Операция |
Р1 |
0 |
0 |
0 |
Сдвиг Cm и Вm вправо на два разряда |
0 |
0 |
1 |
0 |
Cm = Cm + Аm; Сдвиг Cm и Вm вправо на два разряда |
0 |
1 |
0 |
0 |
Cm = Cm + 2Аm; Сдвиг Cm и Вm вправо на два разряда |
0 |
1 |
1 |
0 |
Cm = Cm – Аm; Сдвиг Cm и Вm вправо на два разряда |
1 |
0 |
0 |
1 |
Cm = Cm + Аm; Сдвиг Cm и Вm вправо на два разряда |
0 |
0 |
1 |
1 |
Cm = Cm + 2Аm; Сдвиг Cm и Вm вправо на два разряда |
0 |
1 |
0 |
1 |
Cm = Cm – Аm; Сдвиг Cm и Вm вправо на два разряда |
1 |
1 |
1 |
1 |
Сдвиг Cm и Вm вправо на два разряда |
1 |
Для реализации данного метода будем использовать модифицированный алгоритм выполнения операции представленный на рис. 14.
В этом алгоритме вместо анализа трёх битов b1, b0, P анализируются лишь два бита s1, s0 переменной S, полученной после операции S = (Вm 0003h) + Р. Это позволило существенно сократить длину текста микропрограммы по сравнению с прямым отображением метода.
В
2
2
2
В микропрограмме (табл. 8) предполагается размещение операндов А и В соответственно в регистрах РОН0 и РОН1. Остальные регистры распределены следующим образом: РОН2 – для выполнения требуемых преобразований и размещения конечного результата; РОН3 – для хранения константы вида 10…0, РОН4 – для организации СчЦ; РОН5 – для хранения ЗнC, РОН6 – для хранения значения 2A; РОН7 – для хранения значения P. Регистр РР используется для хранения промежуточных результатов.
Таблица 8
Микропрограмма умножения с анализом двух разрядов
Адрес |
Микроинструкция |
Комментарий |
1 |
2 |
3 |
000 |
РОН0 := ШИНвх |
Ввод операнда A |
001 |
РОН1 := ШИНвх |
Ввод операнда B |
002 |
РР := !РОН0 + П (П = 1) |
Если ПАЛУ3, то 4 иначе 3 (Проверка A = 0) |
003 |
РР := !РОН1 + П (П = 1) |
Если ПАЛУ3, то 4 иначе 5 (Проверка B = 0) |
004 |
РОН2 := !П (П = 1) |
Идти к 63 (C = 0) |
005 |
РР := !П (П = 1) |
РР = 00...0 |
006 |
РР := СЦП(РР + П) (П = 1) |
РР = 10...0 |
007 |
РОН3 := РР + П (П = 0) |
Формирование константы 10...0 |
008 |
РОН7 := !П (П = 1) |
Установка начального значения переноса (P = 0) |
009 |
РР := РОН0 + П (П = 0) |
Пересылка операнда A в РР |
010 |
РР := РОН1 xor РР |
Суммирование операндов по mod2 |
Продолжение табл. 8
1 |
2 |
3 |
011 |
РР := РОН3 and РР |
Формирование ЗнС |
012 |
РОН5 := РР + П (П = 0) |
Сохранение ЗнC |
013 |
РОН2 := !П (П = 1) |
Cm = 00...0 |
014 |
РР := !П (П = 1) |
РР = 00...0 |
015 |
РР := СЛЛ(РР + П) (П = 1) |
РР = 0...10 |
016 |
РР := СЛЛ(РР + П) (П = 0) |
РР = 0...100 |
017 |
РОН4 := РР + П (П = 0) |
Установка СчЦ |
018 |
РР := РОН3 + П (П = 0) |
РР = 10...0 |
019 |
РР := РОН0 and !РР |
Формирование Am |
020 |
РОН0 := РР + П (П = 0) |
Сохранение Am |
021 |
РР := СЛЛ(РР + П) (П = 0) |
Формирование 2A |
022 |
РОН6 := РР + П (П = 0) |
Сохранение 2A |
023 |
РР := РОН3 + П (П = 0) |
РР = 10...0 |
024 |
РОН1 := РОН1 and !РР |
Сохранение Bm |
025 |
РР := !П (П = 1) |
РР = 00...0 |
026 |
РР := РР + П (П = 1) |
РР = 00...1 |
027 |
РР := СЛЛ(РР + П) (П = 0) |
РР = 00...10 |
028 |
РР := РР + П (П = 1) |
РР = 00...11 |
029 |
РР := РОН1 and РР |
Формирование b1, b0 |
030 |
РР := РОН7 + РР + П (П = 0) |
b1, b0 P |
031 |
РР := СЛП(РР + П) (П = 0) |
Если !СДП1, то 32 иначе 48 (Проверка значения s0) |
032 |
РР := СЛП(РР + П) (П = 0) |
Если !СДП1, то 33 иначе 45 (Проверка значения s1) |
033 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР |
034 |
РР: = САП(РР + П) (П=0) |
Сдвиг Cm вправо |
035 |
РР: = САП(РР + П) (П=0) |
Сдвиг Cm вправо |
036 |
РОН2 := РР + П (П = 0) |
Сохранение Cm |
037 |
РР := РОН1 + П (П = 0) |
Пересылка Bm в РР |
038 |
РР := СЛП(РР + П) (П = 0) |
Сдвиг Bm вправо |
039 |
РР := СЛП(РР + П) (П = 0) |
Сдвиг Bm вправо |
040 |
РОН1 := РР + П (П = 0) |
Сохранение Bm |
041 |
РР := РОН4 + П (П = 0) |
Пересылка СчЦ в РР |
042 |
РР := СЛЛ(РР + П) (П = 0) |
Сдвиг СчЦ влево |
043 |
РР := СЛЛ(РР + П) (П = 0) |
Если !СДЛ1, то 44 иначе 56 (Проверка СчЦ = 0) |
044 |
РОН4 := РР + П (П = 0) |
Идти к 25 (Сохранение СчЦ) |
045 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР (s1 = 1, s0 = 0) |
Окончание табл. 8
1 |
2 |
3 |
046 |
РР := РОН6 + РР + П (П = 0) |
Cm = Cm + 2Am |
047 |
РОН7 := !П (П = 1) |
Идти к 34 (P = 0) |
048 |
РР := СЛП(РР + П) (П = 0) |
Если !СДП1, то 49 иначе 52 (Проверка значения s1) |
049 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР (s1 = 0, s0 = 1) |
050 |
РР := РОН0 + РР + П (П = 0) |
Cm = Cm Am |
051 |
РОН7 := !П (П = 1) |
Идти к 34 (Р = 0) |
052 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР (s1 = 1, s0 = 1) |
053 |
РР := РР – РОН0 – 1 + П (П = 1) |
Cm = Cm Am |
054 |
РОН7 := !П (П = 1) |
РОН7 = 00…0 |
055 |
РОН7 := РОН7 + П (П = 1) |
Идти к 34 (P = 1) |
056 |
РР := РОН7 + П (П = 0) |
Пересылка переноса (Р) в РР |
057 |
РР := СЛП(РР + П) (П = 0) |
Если !СДП1, то 61 иначе 58 (Проверка значения P) |
058 |
РР := РОН2 + П (П = 0) |
Пересылка Cm в РР |
059 |
РР := РОН0 + РР + П (П = 0) |
Cm = Cm Am |
060 |
РОН2 := РР + П (П = 0) |
Сохранение Cm |
061 |
РР := РОН5 + П (П = 0) |
Пересылка ЗнC в РР |
062 |
РОН2 := РОН2 or РР |
С = ЗнC Cm |
063 |
ШИНвых := РОН2 |
Вывод С, "Конец" |