Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория цифровых автоматов. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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. Блок-схема алгоритма операции умножения в обратных кодах
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]