КАТЕГОРИИ: Архитектура-(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. С= С0+С1+С2+...............+С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; Просмотров: 3024; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |