Жмакин А.П. Архитектура ЭВМ (2006), страница 10
Описание файла
Документ из архива "Жмакин А.П. Архитектура ЭВМ (2006)", который расположен в категории "". Всё это находится в предмете "техника и элементная база средств цифровой обработки сигналов (тэбс цос)" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .
Онлайн просмотр документа "Жмакин А.П. Архитектура ЭВМ (2006)"
Текст 10 страницы из документа "Жмакин А.П. Архитектура ЭВМ (2006)"
□ А' = —модули чисел;
□ — перенос из знакового разряда;
□ — ситуации переполнения в дополнительном коде.
В алгоритме рис. 3.22 можно отметить один недостаток. При выполнении вычитания (/ = 1) необходимо получить дополнение второго операнда:
В' := В' +1, что является арифметической операцией и требует времени, достаточного для прохождения переноса по всем разрядам числа. Для исключения дополнительной арифметической операции можно в первой операторной
вершине осуществить только инверсию (логическую операцию, которая выполняется быстро), а недостающую "единицу" к младшему разряду добавить, если это необходимо, в качестве входного переноса младшего разряда в момент суммирования слагаемых. Таким образом, в двух первых операторных вершинах алгоритма рис. 3.22 следует поместить такие операторы:
В':= В';
C:=A + B + f.
3.8. Алгоритмы умножения
Умножение двоичных чисел со знаком удобнее всего проводить в прямом коде. Действительно, знак произведения не зависит от соотношения величин модулей сомножителей, а зависит только от их знаков:
а модуль произведения равен произведению модулей сомножителей.
Обозначим А', В', С — модули сомножителей и произведения соответственно. Тогда
Выражение (3.26) определяет процесс формирования произведения путем вычисления частичных сумм и суммы частичных произведений. Напомним, что by — старший разряд множителя, а bп — младший. Вычисляя непосредственно по формуле (3.26), следует на каждом шаге:
1. Проанализировать очередную цифру множителя bt. Если b, = 1, то очередная частичная сумма равна А, и она добавляется к накопленной ранее сумме частичных произведений S (на первом шаге S = 0), иначе добавления не производится.
2. Осуществить правый сдвиг частичного произведения S на один разряд.
Умножение S-2~l соответствует делению на 2, что в двоичной системе счисления равносильно сдвигу числа на один разряд вправо.
3. Пункты 1 и 2 повторяются до тех пор, пока не будут исчерпаны все цифры множителя.
Очевидно, число шагов при использовании приведенного выше метода равно разрядности модуля множителя. Алгоритм умножения чисел, представленных в прямом коде, приведен на рис. 3.23.
В изображенном на рис. 3.23 алгоритме, в отличие от алгоритмов сложения/вычитания, значение OV — 0 устанавливается безусловно. Действительно, А и В — дробные числа; очевидно при |A|<1 и |B|<1 всегда |А∙B|<1.
В результате вычисления по формуле (3.26) получается произведение разрядностью 2п. Если рассматривать сомножители как дроби, то младшие п разрядов можно просто отбросить (округление с недостатком) или округлить до п -разрядного модуля по правилам округления.
Очевидно, из выражения (3.26) легко получить
С' = А'В' =
= (...(0 + ∙ A'- )-2 + ∙А'-Ь2)-2 + ...+ (3.27)
+ ∙А'∙ )∙2 + ∙А'∙ )∙2,
что позволяет производить умножение, начиная со старших разрядов множителя. При этом сдвиг суммы частичных произведений осуществляется влево на один разряд, чему соответствует умножение двоичного числа на 2.
3.8.1.Умножение в дополнительном коде
Если числа поступают на обработку уже представленные в дополнительном коде, то для умножения их можно перевести в прямой код или умножать сразу в дополнительном коде. В последнем случае в умножении участвуют и знаковые разряды сомножителей, причем знак произведения получается в том же цикле, что и разряды модуля произведения. Однако в некоторых случаях требуется коррекция предварительного результата. Мы не будем рассматривать здесь случаи умножения в дополнительном коде. Любознательным рекомендуем соответствующую литературу, например [11].
3.8.2.Методы ускорения умножения
Методы ускорения умножения принято делить [8, 11] на аппаратные и логические. Как те, так и другие требуют дополнительных затрат оборудования. При использовании аппаратных методов дополнительные затраты оборудования прямо пропорциональны числу разрядов в операндах. Эти методы вызывают усложнение схемы операционного автомата АЛУ.
Дополнительные затраты оборудования при реализации логических методов ускорения умножения не зависят от разрядности операндов. Усложняется в основном схема управления АЛУ. В ЭВМ для ускорения умножения часто используются комбинации этих методов.
К аппаратным методам ускорения умножения относятся ускорение выполнения операций сложения и сдвига, введение дополнительных цепей сдвига, позволяющих за один такт производить сдвиг информации в регистрах сразу на несколько разрядов, совмещение во времени операций сложения и сдвига, построение комбинационных схем множительных устройств, реализующих "табличное" и "матричное" умножение.
Пример реализации умножения с использованием и-входового сумматора показан на рис. 3.24.
Здесь частичные произведения формируются на схемах «-разрядных конъ-юнкторов одновременно и подаются на входы п -входового сумматора, причем в сумматоре за счет соответствующей коммутации цепей осуществляются сдвиги частичных произведений (как при выполнении умножения на бумаге "в столбик"). На выходе сумматора получается 2и -разрядное произведение.
Метод табличного умножения (рис. 3.25) позволяет получить произведение за один такт при условии, что вся таблица умножения (результаты умножения всевозможных пар и-разрядных сомножителей!) будет размещена в памяти. Очевидно, для этого понадобится запоминающее устройство объемом
22n 2n -разрядных слов (точно таким же способом можно выполнять и другие "длинные" операции — деление, вычисление функций). Так, для организации 8-разрядного умножителя потребуется память объемом 216 х 16 бит =128 Кбайт, что для современного уровня развития интегральной технологии не кажется чрезмерным.
Однако для 16-разрядного АЛУ умножитель "потянет" уже на 232 х 32 бит =16 Гбайт! Что касается современных 32-разрядных процессоров, то к расчету потребности в памяти для таких умножителей даже страшно приступать.
В этом случае можно воспользоваться таблицей умножения меньшей разрядности, получая с ее помощью частичные произведения, а потом просуммировать их, предварительно сдвинув на соответствующее число разрядов.
Рассмотрим этот способ умножения подробнее. Пусть п — четное. Тогда каждый из двух сомножителей можно представить конкатенацией двух полей одинаковой разрядности n/2: А = Ah Al, В = BhBl. В этом случае произведение можно представить следующим выражением:
AxB = Al ∙ Bl+2n/2 ∙Ah-Bl+2n/2 ∙ Аl ∙Bh + 2n • Ah ■ Bh
Таким образом, располагая, например, таблицей умножения 8x8, можно получить произведение двух 16-разрядных сомножителей, сложив (с соответствующим сдвигом) всего 4 слагаемых. Проиллюстрируем этот метод на простом примере.
Пусть требуется перемножать 4-разрядные числа без знака. Построим таблицу умножения 2x2 (при рассмотрении примера не будем включать в нее пары сомножителей, когда один из них равен нулю, а так же пары сомножителей, симметричные уже включенным) — рис. 3.26.
Пример 3.22
Выполним умножение 6x10 = 60 или в двоичном коде 01.10x10.10 = 00111100. Из таблицы получаем частичные произведения: А1хВ1 =10x10 = 0100, A,xBh =10x10 = 0100, Ah хВ, =01x10 = 0010, AhxBh =01x10 = 0010.
Теперь сложим частичные произведения, предварительно сдвинув их в соответствии с (3.28). Результат — на рис. 3.27.
Пример 3.23
Выполним умножение 7x11 = 77 или в двоичном коде 01.11x10.11 = 01001101.
Из таблицы получаем частичные произведения: At х5, = 1 lxl 1 = 1001, Л, xBh =11x10 = 0110, AhxB, =01x11 = 0011, AhxBh =01x01 = 0001.
Теперь сложим частичные произведения, предварительно сдвинув их в соответствии с (3.28). Результат — на рис. 3.28.
Среди логических наиболее распространены в настоящее время методы, позволяющие за один шаг умножения обработать несколько разрядов множителя. Рассмотрим один из способов умножения на два разряда множителя, начиная с его младших разрядов. В зависимости от результата анализа пары разрядов множителя предусматриваются следующие действия (табл. 3.3).
Таким образом, для умножения сразу на два разряда множителя достаточно:
□ при 00 просто произвести сдвиг на два разряда;
□ при 01 прибавить к сумме частичных произведений множимое и произвести сдвиг на два разряда;
□ при 10 прибавить к сумме частичных произведений удвоенное множимое и произвести сдвиг на два разряда;
□ при 11 вычесть из суммы частичных произведений множимое (или добавить обратный (дополнительный) код множимого), произвести сдвиг на два разряда и добавить 1 к следующей (старшей) паре цифр множителя.
При классическом методе умножения двоичных я -разрядных чисел согласно выражению (3.26) потребуется п сдвигов суммы частичных произведений и п/2 (в среднем) сложений множимого с суммой частичных произведений. Один из методов ускорения операции умножения — анализ сразу двух разрядов множителя. Это позволит получить результат, применяя п/2 сдвигов и (в среднем) Зи/8 сложений/вычитаний.
3.9. Алгоритмы деления
Знак частного, как и знак произведения, не зависит от соотношения модулей операндов и определяется в зависимости от знаков операндов по выражению (3.25). Поэтому рассмотрим сначала процесс деления модулей двоичных чисел.