Лабораторная работа № 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
ССА используются следующие обозначения:
ЗнA, ЗнB и ЗнC – знаковые биты операндов
A и B и результата C; Am, Bm и Cm – модули
операндов и результата; СчЦ – счетчик
циклов;s0,
s1
– два младших разряда переменной S;
P
– значение бита переноса из предыдущей
пары разрядов множителя до операции;
Bm
– логический правый сдвиг Bm
на два разряда;
Cm
– арифметический правый сдвиг Cm
на два разряда (подобный сдвиг результата
операции Сm
= Сm
– Аm
позволяет учесть тот факт, что отрицательный
результат будет представлен в
дополнительном коде); ![]()
СчЦ
– логический левый сдвиг СчЦ на два
разряда.
В микропрограмме (табл. 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 |
Вывод С, "Конец" |
