Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория цифровых автоматов. Учебное пособие
.pdf
71
00110
*
01101
0000000000 – ΣЧП0;
+ 00110 – прибавление множимого, разряд множителя равен 1;
0011000000 – ΣЧП1;
0001100000 – сдвиг вправо на 1 разряд ΣЧП1;
0000110000 – сдвиг вправо на 1 разряд ΣЧП2;
+ 00110 – прибавление множимого, разряд множителя равен 1;
0011110000 – ΣЧП3;
0001111000 – сдвиг вправо на 1 разряд ΣЧП3;
+ 00110 – прибавление множимого, разряд множителя равен 1;
0100111000 – ΣЧП4;
0010011100 – сдвиг вправо на 1 разряд ΣЧП4;
0001001110 – дополнительный сдвиг вправо на 1 разряд после
умножения на все значащие разряды множителя для правильной
постановки результата в формате 2n разрядов (или умножение на
знаковый разряд).
Одновременно с умножением на знаковый разряд определяется знак
произведения, как «сумма по модулю 2» знаков сомножителей: Z
Произведение А*В = (0001001110)
Проверка: (–6)
* (–13)
10
= (78)10.
10
= (+1001110)2 = (78)10.
2пр
знак
= 0.
Рассмотрим одну их возможных структур операционного автомата
(ОА) для выполнения умножения операндов в прямых кодах (рис. 15).

72
RGA
Sm
RGSm
RGB Bi
Шина У
Шина Х
Т Sign A
Т Sign B
=1
Шина Z
Sign C
C
A
B
CT
Sign A
Sign B
B(n-1), ……………….………….….…, B3, B2, B1, B0
A(n-1), ……………….…… …, A3, A2, A1, A0
ΣЧП(2n-1), ………... ..…, ΣЧП1, ΣЧП0
(2n-1), ……………….. ..…, 3, 2, 1, 0
С
Рис. 15. Структурная схема ОА для выполнения операции умножения
Поясним значение некоторых блоков ОА. Для приема модулей
операндов А и В используются регистры RG A и RG B. Следует обратить
внимание, что в этих регистрах хранятся только значащие разряды чисел
(А0, А1, А2, …., А
и В0, В1, В2, …., В
n-1
). Для хранения знаков операндов
n-1
Sign A и Sign B используются триггеры Т Sign A и Т Sign B. СТ –
n-разрядный счетчик циклов. Сумматор Sm предназначен для получения
суммы частичных произведений ΣЧПi, где i=0…(n-1). Для хранения
полученной суммы служит регистр сумматора RG Sm.
На рис. 16 представлена блок-схема алгоритма выполнения операции
умножения в прямых кодах. Рассмотрим назначение операторных и
условных вершин алгоритма.
Вершина 2. Здесь выполняется запись операндов А и В с шин Х и Y
в RGA и RGB; устанавливаются начальные значения регистра сумматора

73
RG A:= Х; RG B:= Y;
RG Sм:= 0; CT:= n;
Т Sign A:= Sign A;
Т Sign B:= Sign B.
Начало
B0 = 1?
RG Sм := RG Sм + RG A
1
2
3
4
RG Sм := R1 (RG Sм);
RG B := R1 (RG B);
CT := CT - 1.
CT = 0?
0
1
0
1
Sign Z := T Sign A + T Sign B
Z := RG Sм
Конец
5
6
7
8
9
+
(RG Sm) и счетчика циклов СТ; знаковые разряды операндов
записываются в триггеры Т SignA и Т SignB.
множителя В0. Если В0=1, то переходим на вершину 4; если В0=0, то
Рис. 16. Блок-схема алгоритма операции умножения в прямых кодах
Вершина 3. Выполняется анализ значащего младшего разряда
переходим на вершину 5.

74
Вершина 4. К содержимому регистра сумматора RG Sm
прибавляется значение RG А.
Вершина 5. Выполняется сдвиг регистров RG Sm и RG В вправо на
один разряд и одновременно уменьшается значение счетчика циклов на
единицу.
Вершина 6. Проверяется значение счетчика циклов. Если СТ = 0, то
переходим к вершине 7, если СТ ≠ 0, то возвращаемся на вершину 3.
Вершина 7. Здесь вычисляется значение знака произведения Z как
«сумма по модулю 2» знаков операндов, которые хранятся в триггерах Т
SignA и Т SignB.
Вершина 8. Результат операции умножения выдается на шину
результата Z.
3.6. Алгоритм умножения двоичных чисел в дополнительных кодах в
форме с фиксированной запятой
Алгоритм умножения в дополнительных кодах основан на формуле
Особенности алгоритма умножения чисел в дополнительных кодах:
1) рассмотренный ранее алгоритм умножения двоичных чисел в
прямых кодах сохраняется, но сомножители должны быть
представлены непосредственно дополнительными модифицированными кодами операндов;
2) при использовании дополнительных кодов частичное
произведение ЧПi получается за счет модифицированного сдвига
кода ΣЧП
в отличие от простого (арифметического) сдвига для
i-1
случая использования прямых кодов. Модифицированный сдвиг
заключается в размножении знакового разряда;
3) если множитель отрицателен (SignY=1), то на дополнительном
(n+1)º-м шаге к частичному произведению ЧПi прибавляется
корректирующая поправка в виде дополнения числа Х, т. е.
дополнительного кода множимого, взятого с противоположным
знаком.
Поясним работу алгоритма на примере.

75
Пример 8. Умножение в дополнительном коде Z
А
= (+3)10 = 0 011пр = 0 011
пр
B
= (–5)10 = 1 101пр = 1 011
пр
= 00 011
доп
= 11 011
доп
Так как Bпр<0, то на последнем шаге требуется ввод
корректирующей поправки К = [-A]
м
доп
.
Для отыскания коэффициента К необходимо выполнить
последовательность преобразований:
[A]
м
→ [-A]
пр
м
→ [-A]
пр
м
. Таким образом, получается:
доп
00 011 → 11 011 → 11 101. Отсюда К = [-A]
Перемножаем числа целые, следовательно, произведение должно
быть представлено двойной (2n) разрядностью.
00 011
*
00 011
доп
м
м
= А
доп
.
доп
м
доп * Bдоп
;
= 11 101.
доп
.
00 000000 – ΣЧП0;
+ 00 011 – прибавление множимого, разряд множителя равен 1;
00 011000 – ΣЧП1;
00 001100 – модифицированный сдвиг вправо на 1 разряд ΣЧП1;
+ 00 011 – прибавление множимого, разряд множителя равен 1;
00 100100 – ΣЧП2;
00 010010 – модифицированный сдвиг вправо на 1 разряд ΣЧП2;
00 001001 – модифицированный сдвиг вправо на 1 разряд ΣЧП3;
+ 11 101 – корректирующая поправка К = [-A]
11 110001 – результат умножения Z
Произведение А
Проверка: (+3)
10
м
доп
* (-5)
* В
10
м
= (11 110001)
доп
= (-15)10.
м
.
доп
= (11 001111)
доп
м
доп
;
= (-15)10.
пр
Приводить блок-схему алгоритма умножения в дополнительных
кодах нецелесообразно. Отличия от рис. 5 только в вершине 7, где вместо
вычисления знака результата следует к содержимому регистра RG Sm
прибавить корректирующую поправку К = [-A]
м
доп
.

76
3.7. Алгоритм умножения двоичных чисел с фиксированной запятой
в обратных кодах
Основой построения алгоритма является формула:
В целом алгоритм умножения двоичных чисел сохраняется и в
случае представления операндов непосредственно обратными
модифицированными кодами. Однако, при наличии отрицательного
множителя выполняется коррекция частичного произведения ЧПn с
помощью двух корректирующих поправок:
- К1 = [-Х]
м
– обратный код множимого, взятого с
обр
противоположным знаком. Данный код получают путем инвертирования
всех разрядов (включая и знаковый) в исходном коде множимого Х
- К2 = 2-n * Х
м
– обратный код, полученный модифицированным
обр
сдвигом вправо на n разрядов заданного обратного кода множимого Х
м
обр
;
м
обр
В результате такого сдвига код К2 имеет удвоенное количество числовых
разрядов, равное 2n.
Такое же количество разрядов должны содержать коды частичных
произведений и слагаемые Слi = Х
м
. В этом особенность умножения
обр
.
обратных кодов сомножителей.
Обратите внимание.
Независимо от того является ли множимое дробным или целым
числом, поступают одинаковым образом при формировании обратного
кода множимого Х
именно: к коду Х
м
с удвоенным количеством числовых разрядов, а
обр
м
, содержащему n числовых разрядов, добавляют
обр
младшую группу (также из n числовых разрядов), причем значения этих
разрядов равны «1», если множимое Х<0 и равны «0», если Х>0.
Например,
Х
Х
м
= 11.101 → Х
обр
м
= 00.101 → Х
обр
м
= 11.101 111;
обр
м
= 00.101 000.
обр
Младшую группу разрядов (подчеркнуто выше) обязательно
необходимо учитывать при вычислении ΣЧПi = ΣЧП
+ Слi.
i-1
Следовательно, Sm
будет содержать 2n числовых разрядов, что
обр

77
потребует больших аппаратных затрат в сравнении с использованием Smпр
и Sm
для алгоритмов умножения прямых или дополнительных кодов.
доп
Пример 9. Умножение в обратных кодах Z
А
= (–3)10 = 1 011пр = 1 100
пр
B
= (–5)10 = 1 101пр = 1 010
пр
= 11 100
обр
Так как Bпр<0, то на последнем шаге требуется ввод
корректирующих коэффициентов К1 = [-А]
коэффициенты К1 и К2:
м
= 00. 011 = 00.011 000;
обр
м
= 11. 111 100.
обр
11 100 111
*
К1 = [-А]
К2 = 2-n * А
11 010
00 000 000 – ΣЧП0;
= А
обр
м
= 11 100 111;
обр
= 11 010
обр
м
и К2 = 2-n * А
обр
обр * Bобр
м
.
обр
.
м
. Найдем
обр
+ 11 100 111 – прибавление множимого, разряд множителя равен 1;
11 100 111 – ΣЧП1;
11 110 011 – модифицированный сдвиг вправо на 1 разряд ΣЧП1;
11 111 001 – модифицированный сдвиг вправо на 1 разряд ΣЧП2;
+ 00 011 000 – прибавление К1 (так как Bпр<0);
1 00 010 001 – ΣЧП3 после 1-й коррекции;
|________↑ – циклическое сложение с «1»;
00 010 010
+ 11 111100 – прибавление К2;
1 00 001110 – ΣЧП4 после 2-й коррекции;
|________↑ – циклическое сложение с «1»;
00 001111 – результат умножения Z
Произведение А
Проверка: (–3)
10
м
доп
* (–5)
* В
м
10
= (00 001111)
доп
= (+15)10.
м
обр
.
= (00 001111)
обр
= (+15)10.
обр
Однако, учитывая простоту перехода от прямого кода к обратному
коду и наоборот, можно построить алгоритм без внесения
корректирующих поправок.

78
Алгоритм умножения операндов в обратных кодах без
корректирующих поправок.
1. Сомножители представляются в обратных кодах.
2. Исходное значение суммы частичных произведений ΣЧПi = 0.
3. - если знак множителя Sign Y = 1 и анализируемая цифра множителя
Yi=0, то к сумме частичных произведений ΣЧПi прибавляется
инверсия обратного кода множимого (
).
- если знак множителя Sign Y = 0 и анализируемый i-разряд Yi=1, то
к сумматору частичных произведений ΣЧПi прибавляется обратный код
множимого Х
обр
.
- во всех остальных случаях прибавления не производится.
4. Сумма частичных произведений и множитель сдвигаются вправо на
один разряд. Сдвиг модифицированный.
5. Пункты 3 и 4 повторяются для всех разрядов множителя, начиная с
младшего.
6. Произведение получается в обратном коде, если sign X ≠ sign Y, и в
прямом коде, если sign X = sign Y.
Пример 10. Умножение в обратных кодах Z
А
= (–3)10 = 1 011пр = 1 100
пр
B
= (+5)10 = 0 101пр = 0 101
пр
= 11 100
обр
= 00 101
обр
обр
= А
обр * Bобр
м
;
обр
м
.
обр
.
11 100
*
00 101
00 000 – исходное значение ΣЧП0;
+ 11 100 – прибавление множимого Х
, т.к. 1-й разряд Y
обр
равен 1;
обр
11 100 – сумма частичных произведений ΣЧП1;
11 110 (0) – модифицированный сдвиг вправо на 1 разряд ΣЧП1;
11 111 (0) – модифицированный сдвиг вправо на 1 разряд ΣЧП2;
+ 11 100 – прибавление множимого Х
, т.к. 3-й разряд Y
обр
равен 1;
обр
1 11 011 – сумма частичных произведений ΣЧП3;
|_____↑ – циклическое сложение с «1»;
11 100
11 110 (0) – модифицированный сдвиг вправо на 1 разряд ΣЧП3;

79
Цифры «0» вынесенные в скобки и выделенные жирным шрифтом
возникли в результате сдвигов вправо, они должны быть сохранены и
записываются в младшую часть результата снизу вверх.
Результат Z
Проверка: (–3)
= 11 110000
обр
* (+5)
10
= 11 001111пр = (-15)10 .
обр
= (–15)10.
10
Обратите внимание. Во время сложения по данному алгоритму
возможны ситуации, когда модифицированные знаковые разряды чисел
равны «10» и «01». «10» – случай отрицательного переполнения, которое
ликвидируется после сдвига вправо. «01» – случай положительного
переполнения, которое ликвидируется после сдвига вправо.
Граф-схема алгоритма (ГСА) умножения в обратных кодах с
фиксированной запятой изображена на рис. 17.
Вершина 2. Здесь выполняется запись операндов А и В с шин Х и Y
в RGA и RGB; устанавливаются начальные значения регистра сумматора
(RG Sm) и счетчика циклов СТ; знаковые разряды операндов
записываются в триггеры Т SignA и Т SignB.
Вершина 3. Выполняется анализ знакового разряда множителя В
(sign B) и переход к условным вершинам 4.
Вершина 4. Анализируется младший значащий разряд множителя В0.
И выполняется переход на вершину 5 или 6.
Вершина 5. К содержимому регистра сумматора RG Sm
прибавляется инверсное значение регистра А ().
Вершина 6. К содержимому регистра сумматора RG Sm
прибавляется значение RGA.
Вершина 7. Выполняется сдвиг регистров RG Sm и RG В вправо на
один разряд и одновременно уменьшается значение счетчика циклов на
единицу.
Вершина 8. Проверяется значение счетчика циклов. Если СТ = 0, то
переходим к вершине 9, если СТ ≠ 0, то возвращаемся на вершину 3.
Вершина 9. Результат операции умножения выдается на шину
результата Z.

80
RG A:= Х; RG B:= Y;
RG Sм:= 0; CT:= n;
Т Sign A:= Sign A;
Т Sign B:= Sign B.
Начало
SignB=1?
RG Sм := RG Sм + RG A
1
2
3
4
RG Sм := R1 (RG Sм);
RG B := R1 (RG B);
CT := CT - 1.
CT = 0?
0
1
0
1
Z := RG Sм
Конец
5
6
7
8
9
B0 = 1?B0 = 1?
0
RG Sм := RG Sм + RG A
1
1
0
10
Рис. 17. Блок-схема алгоритма операции умножения в обратных кодах
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
