Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Умножение от младших разрядов множителя со сдвигом суммы частных произведений вправо




Умножение двоичных чисел

Существуют две основных группы алгоритмов умножения:

1) умножение в прямых кодах

2) умножение в дополнительных кодах.

Умножение в прямых кодах целесообразно использовать, когда числа в памяти хранятся в прямых или обратных кодах. Вторая группа алгоритмов применяется, если числа в памяти хранятся в дополнительных кодах.

Рассмотрим операции двоичного умножения в прямых кодах для чисел с фиксированной запятой. Будем вычислять:

С=А*В; |A|<1; |B|<1; A≠0; B≠0.

|B| = b1*2-1+ b2*2-2+ b3*2-3+...............+ bn*2-n

|C| = |A|*(b1*2-1+ b2*2-2+ b3*2-3+...............+ bn*2-n)

Знаки, как правило, непосредственно в операции умножения не участвуют и знак произведения определяется логическим путем.

Если ЗНА = ЗНВ то ЗНС = 0, иначе ЗНС = 1

Для простоты изложения будем считать, что сомножители положительны и в дальнейших выкладках значок модуля не будет употребляться. В общем случае произведение может быть записано в виде суммы частных произведений. Как правило, принимается С0 = 0.

С= С012+...............+Сn

На каждом шаге умножения вычисляется очередная сумма частных произведений, которую обозначим Si. Так при умножении от старших разрядов множителя первая сумма частных произведений будет

S1=C0 + C1 и т.д.

При выполнении операции умножения всего возможны четыре алгоритма:

— умножение от младших разрядов множителя со сдвигом множимого влево;

— умножение от младших разрядов множителя со сдвигом суммы частных произведений вправо;

— умножение от старших разрядов множителя со сдвигом множимого вправо;

— умножение от старших разрядов множителя со сдвигом суммы частных произведений влево.

Реализация этих алгоритмов приводит к построению вариантов АЛУ, различающихся по аппаратурным затратам и быстродействию. Наиболее употребительными являются второй и третий алгоритмы.

Отметим основные особенности алгоритма:

1) К началу умножения числа в регистрах АЛУ должны быть представлены в прямых кодах.

2) Операция умножения выполняется над модулями чисел.

3) Умножение начинается от младших разрядов множителя, т.е. в первом такте вычисляется Cn = | А |*bn и далее сдвиг вправо.

4) В каждом такте после определния очередой суммы частных произведений она сдвигается на один разряд вправо.

5) Знак произведения находится логическим способом.

Рассмотрим числовой пример, и на этой основе разработаем машинный алгоритм

А=3/8; B=5/8; Найти С=A * B; C=15 / 64;

Запишем в двоичном коде: [A]п = 0.011; [B]п = 0.101; [C]п = 0.001111

Все алгоритмы умножения являются циклическими, поэтому

В машинных алгоритмах для подсчета числа циклов вводиться счет-

Чик сдвигов. Перед началом умножения в счетчик заносится нуль.

A=.011

B=.101

.000000 С0=0

Cч сдв=0 + .011 А* b3

.011000 С0 + A * b3= С0 + С1

Cч сдв=1.001100 (С0+ С1)*2-1= S1

+ .000 А* b2

.001100 S1 +А* b2

Cч сдв=2.000110 (S1 +А* b2)*2-1=S2

+ .011 А* b1

.011110 ((С0+ А* b3)*2-1 +А* b2))*2-1 +А* b1

Cч сдв=3 .001111 (((С0+ А* b3)*2-1 +А* b2))*2-1 +А* b1)*2-1 =S3

В нашем примере n=3, поэтому умножение закончено и в последней строке примера находится искомое произведение

S3 = |C| =.001111 = 15/64.

 

В результате произведенного анализа можно записать следующее рекурентное соотношение, в соответствии с которым выполняются действия в каждом такте умножения при вычислении очередной частичной суммы

Si=(Si-1+ А* bn-i+1)*2-1

При использовании этого алгоритма, возможно получение произведения с двойной точностью. Если достаточно получить произведение с одинарной точностью, то после окончания всех тактов умножения необходимо выполнить округление. При этом число разрядов в сумматоре регистра результата должно равняться (n+1).

Время умножения в прямых кодах в общем случае определяется следующим выражением:

Тумн.пк=n*(tсдв+ tсл), где t сдв – время выполнения операции сдвиг,

t сл - время выполнения операции сложение.

tсдв — длительность сдвига, где

tсл — длительность операции сложения.




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 2997; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.