
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
4.5. Умножение чисел, заданных в дополнительном коде
Операцию умножения проще всего выполнять в прямых кодах чисел. Вместе с тем применение инверсных кодов позволяет существенно упростить операцию алгебраического сложения. Поэтому числа желательно хранить в ЗУ и умножать также в инверсном коде. В этом случае сомножители заданы в прямом коде, если они положительны, либо в инверсном коде, если они отрицательны. Необходимо получить произведение в прямом коде, если оно положительно, или в инверсном коде, если оно отрицательно. При этом, с целью устранения циклических переносов, рациональнее использовать дополнительный код. При умножении в дополнительном коде, так же, как и при алгебраическом сложении, требуется введение поправок в предварительный результат. Эти поправки вносятся исходя из следующих предпосылок.
Если число А отрицательно, то значащие цифры его дополнительного кода образуют величину
| [A] Д | = 1 - | А |. Поэтому при перемножении модулей кодов операндов в зависимости от сочетания знаков сомножителей могут возникнуть 4 случая.
1. А >0, В > 0. Случай тривиальный, получаем сразу истинное значение положительного произведения:
[А] Д [В] Д =[АВ] Д = АВ.
2. А > 0, В < 0. В этом случае получается следующий результат (псевдопроизведение):
| [А] Д | |[В] Д |=| A |(1-| B |) = | А | - | A | | B |.
Истинное произведение в дополнительном коде должно быть равно |[AВ]Д| = 1 — | А | •| В |. Поэтому требуется коррекция псевдорезультата на величину Δ= 1 — | А |, т. е. на величину дополнения модуля множимого до единицы.
3. А < 0, В > 0. Получаем после непосредственного применения алгоритма умножения:
| [А] Д | |[В] Д |=(1-| A | ) | B | = | B | - | A | | B |.
Истинный результат в дополнительном коде составит |[AВ]Д| = 1 — | А | •| В |. Следовательно, требуется коррекция псевдорезультата на величину Δ= 1 — | В |, т. е. па величину дополнения множителя до единицы.
4. А < 0, В < 0. После непосредственного применения алгоритма умножения получаем
| [А] Д | |[В] Д |=(1-| A | )(1- | B |) =1- | A | - | B | + | A | | B |.
Псевдорезультат требует коррекции на величину Δ= | А | + | В |, так как лишняя единица размещается в знаковом разряде и может быть просто заменена знаком произведения.
Как видим, сложность коррекции результата при умножении чисел в дополнительных кодах обусловлена тем, что в исправлении нуждается не только знак, но и цифровая часть произведения. Коррекцию можно производить или в процессе формирования результата, или сразу но окончании этого процесса. Первый способ применяют чаще, так как он не требует дополнительных тактов работы АУ, снижающих скорость счета и усложняющих схему управления умножением. Кроме того, при сдвигах, как правило, теряются один или оба сомножителя, а повторное обращение за ними в ЗУ нежелательно, так как приводит к снижению быстродействия ЭВМ.
С учетом изложенного коррекцию псевдорезультата для отрицательного множителя можно выполнить при умножении множимого А, на знаковую единицу множителя В, рассматривая ее как отрицательную, то есть вместо суммирования А в этом цикле умножения нужно выполнить вычитание А или же суммирование [- А] Д . Ввиду того что в этом цикле прибавляется 2 - | А| вместо 1 - | А|, то сразу же формируется и правильная знаковая цифра результата, так как в силу исходного сочетания знаков он должен быть отрицательным и, значит, представлен в дополнительном коде. Таким образом, описанный прием обеспечивает коррекцию как величины результата, так и его знака.
Пример. Заданы А = 0,1011; [- A]ДМ = 11,0101;
B = - 0,1101; [B] ДМ =11,0011.
00,1011
X
11,0011
11,0101 —А • 2 0
00,00000 + 0
00,000000 + 0
+ 00,0001011 +А • 2 - 3
00,00001011 +А • 2 - 4
[A]Д [В]Д = 11,01110001.
Получаем правильный результат со знаком.
При отрицательном множимом и положительном множителе требуется коррекция результата на величину — В, введение которой зависит от схемы умножения. Для любой схемы умножения справедливо
[A]Д [В| Д = [A] Д •0,b1b2 …b n = [A]Дb1• 2 - 1 + [A]Дb2• 2 - 2 +…+ [A]Дbn• 2 - n. (4.16)
Следовательно, при положительном множителе умножение производится как в прямых кодах, так и с тем отличием, что множимое передается в сумматор со знаком в модифицированном дополнительном коде. При этом в зависимости от схемы умножения выполняются модифицированные сдвиги либо множимого, либо содержимого сумматора.
Пример. Заданы А = - 0,1011, [А] ДМ = 11,0101;
В = + 0,1101; [В] ДМ = 00,1101.
4-я схема умножения 1-я схема умножения
11,0101 11,0101
X X
00,1101 00,1101
00,0000 -0 • А• 2 0 + А 11,0101 Сдвиг
11,10101 + А • 2 -1 +0 11,10101 Сдвиг
11,110101 + А• 2 - 2 + 11,110101
00,0000000 +0 +А 11,0101
11,11110101 +А•
2 -
4
11,001001 Сдвиг
11,01110001
11,1001001
+ А 11,0101
10,1110001 Сдвиг
11,01110001.
Для 1-й схемы выполняется модифицированный сдвиг суммы частичных произведений, для
4-й—множимого.
Если оба сомножителя отрицательны, то коррекция +| А |+| B | может быть получена объединением рассмотренных способов введения коррекций | А | и | В |. При этом получается правильный результат со своим знаком.
Пример. Заданы А = - 0,1011; [А] ДМ = 11,0101;
B = - 0,1101; [В] ДМ = 11,0011.
11,0101
X
11,0011
00,1011 - А • 2 0
00,00000 + 0
00,000000 + 0
11,1110101 +А • 2 - 3
11,11110101 +А • 2 - 4
00,10001111
Если сомножители представлены обратным кодом, то методы коррекции псевдопроизведения значительно усложняются. Поэтому в этом случае проще избавиться от отрицательных сомножителей благодаря использованию инверсных передач, а затем результат по необходимости преобразовать в обратный код.
Если сомножители представлены дополнительным кодом, можно применить также способ умножения, основанный на сопоставлении двух смежных цифр множителя.
В дополнительных кодах произведение имеет вид
[С] Д = [А]Д [В]Д = - [АД] b0 • 2 0 + [A]Д b1 • 2 - 1 +…+[A]Д bi • 2 - i+…+[A]Д bn • 2 – n, (4.17)
где b0 — знаковый разряд множителя. Его можно представить следующим образом:
[С]Д = [АД](b1 - b0 )• 2 0 + [A]Д (b2 - b1 )• 2 - 1 +…+[A]Д (bi+1 –bi )• 2 - i+…+[A]Д (bn+1 - bn )• 2 – n. (4.18)
При этом bn+1 = 0. Тогда, с учетом того, что перед началом умножения в сумматоре находится код нуля, для четвертой схемы умножения на нулевом шаге будем иметь
С0 = 0 + (b1 - b0 )[АД] • 2 0
На первом шаге
С1 = С0 + (b2 - b1 )[АД] • 2 - 1
На i-м шаге
Ci = Сi-1 + (bi+1 – bi )[АД] • 2 - i
Аналогичные результаты можно получить и для остальных схем умножения.
Таким образом, произведение формируется по следующим правилам:
1) если данная цифра множителя равна 1, а цифра соседнего младшего разряда множителя есть 0, то множимое со своим весом следует вычитать;
2) если данная цифра множителя 0, а цифра соседнего младшего разряда есть 1, то множимое следует прибавлять со своим весом;
3) если данная цифра множителя такая же, как и цифра соседнего младшего разряда, то данное частичное произведение равно 0.
При этом множимое всегда передается в сумматор со своим знаком в модифицированном коде, а сдвиги множимого или суммы частичных произведений (в зависимости от схемы умножения) должны быть модифицированными.
Ценность этого способа состоит в том, что при любом сочетании знаков сомножителей процесс умножения остается неизменным, Коррекция, необходимая при умножении сомножителей или их изображений, вводится автоматически, так как знаковые разряды чисел обрабатываются так же, как и цифровые.
Примеры 1) А = 0,1011; 2) А = 0,1011;
B = 0,1101; В = -0,1101;
[B] ДМ =11,0011
00,1011 00,1011
X X
00,1101 11,0011
00,1011 11,0101
00,00000 00,00000
+ 11,110101 + 00,001011
00,0001011 00,0000000
11,11110101 11,11110101
00,10001111 11,01110001
3) А = - 0,1011; 4) A = - 0,1011;
B = 0,1101; B = - 0,1101;
[A] ДМ =11,0101; [A] ДМ =11,0101;
[B] ДМ =11,0011
11,0101 11,0101
X X
00,1101 11,0011
11,0101 00,1011
00,00000 00,00000
+ 00,001011 + 11,110101
11,1110101 00,0000000
00,00001011 00,00001011
11,01110001 00,10001111.
Во всех случаях получены прежние результаты.