Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bilety_EVM.doc
Скачиваний:
21
Добавлен:
21.09.2019
Размер:
1.68 Mб
Скачать

6. Выполнение машинных операций умножения и деления.

Машинные методы умножения чисел в прямых кодах

Операция умножения состоит из ряда последовательных сложений. Сложением управляют разряды множителя: если в очередном разряде множителя содержится единица, то к сумме добавляется множимое. При этом, в зависимости от метода умножения, выполняется сдвиг либо множимого, либо частичной суммы. Наряду с этим умножение можно начинать как с младших, так и со старших разрядов множителя.

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

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

Остановимся более подробно на реализации умножении согласно алгоритму А.

Представим Мн= А = 0,а1а2…аn

Мт= B = 0,b1b2….bn = b12-1+b22-2+…+bn2-n+bn2-n.

Мн∙Мт = С=А∙В= 0,а1а2…аn ( b12-1+b22-2+…+bn2-n)=

=0+(b1∙0,а1а2…аn)2-1+…+(bn-1∙0,а1а2…аn)2-(n-1)+(bn∙0,а1а2…аn)2-n=

=0+b1∙A2-1+…+bn-1∙A2-(n-1)+…+bn∙A2-n=0+bn∙A2-n+bn-1∙A2-(n-1)+…+b1∙A2-1=

=(…((0+bn∙A)2-1+bn-1∙A)2-1+…+b1∙A)2-1

Ниже приведены (без вывода) остальные три реализации алгоритмов (Б, В и Г) умножения.

Мн∙Мт = С=А∙В = (0+bn∙A+bn-1∙A∙22+…+b1∙A∙2n-1)2-n (алгоритм Б)

Мн∙Мт = С=А∙В = (…(0+b1∙A) ∙21+b2∙A)∙21+…+bn∙A)∙2-n (алгоритм В)

Мн∙Мт = С=А∙В = 0+b1∙A∙2-1+b2∙A∙2-2+…+bn∙A∙2-n (алгоритм Г)

Структурные схемы операционных устройств, выполняющих умножение по алгоритмам А,Б,В и Г приведены на рис 7.

Рассмотрим пример умножения чисел согласно алгоритму А.

Пример: МH = 0,1011

b1 … b4

4

МT = 0,1101

0,0000 начальное содержимое сумматора

0,1011 = Мн ∙ b4 первое частичное произведение

0,1011 первая частичная сумма

0,0101 1 ∙ 2-1 сдвиг первой частичной суммы

0,0000 = Мн ∙ b3 второе частичное произведение

0,0101 1 вторая частичная сумма

0,0010 11 ∙ 2-1 сдвиг второй частичной суммы

0,1011 = Мн ∙ b2 третье частичное произведение

0,1101 11 третья частичная сумма

0,0110 111 ∙ 2-1 сдвиг третьей частичной суммы

0,1011 = Мн ∙ b1 четвертое частичное произведение

1,0001 111 (возникло переполнение)

0,1000 1111 ∙ 2-1 сдвиг для получения верного результата Мн∙Мт

Заметим, что при умножении чисел по алгоритму А на отдельных этапах операции возможно переполнение (попадание значащей единицы в знаковый разряд). Однако при последующем сдвиге переполнение устраняется. При использовании других алгоритмов (Б, В, Г) переполнения не возникает.

Ускорение операции умножения

При стандартных методах умножения в каждом такте осуществляется последовательный сдвиг в соответствующих регистрах и промежуточное суммирование. При этом время формирования окончательного результата в основном зависит от времени суммирования. Ускорить машинное время выполнения операции можно путём сокращения количества суммирования промежуточных результатов.

Если при анализе множителя в нем окажется последовательно изображённых m единиц, то самая младшая единица заменяется на единицу с крышкой. (Операция сложения заменяется операцией вычитания, оставшиеся m-1 единиц разрядной сетки множителя заменяются нулями, а ближайший нуль слева на единицу.)

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

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

Матричные методы умножения.

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

Деление чисел в прямых кодах.

Алгоритм деления с восстановлением остатка состоит в следующем.

1. Выполняется пробное вычитание с формированием первого остатка A1=[Дм]доп+[-Дм]доп. Далее, если А1 < 0, то в первый разряд, расположенный слева от запятой заносится ноль (0, ), иначе единица (1, ) – переполнение и переход к пункту 5.

2. Если Аi < 0, то восстанавливаем предыдущий остаток Ai=Ai+[Дм]доп.

3. Формирование очередного остатка. Ai+1=Ai∙2+[-Дм]доп, то в очередной разряд частного справа от запятой записывается ноль (Чт(n)=0), иначе записывается единица (Чт(n)=1).

4. Если достигнута заданная точность частного или получен нулевой остаток Ai+1, то процесс деления окончен и переход к пункту 5, иначе переходим к пункту 2 алгоритма.

5. Окончание алгоритма.

Из рассмотренного алгоритма видно, что:

1) необходимо затрачивать время на восстановление остатка;

2) процесс деления не регулярный, в зависимости от делимого и делителя

частное будет содержать нулей больше или меньше, и чем больше нулей, тем больше требуется времени на восстановление остатков.

Как видно из примера, для получения остатка Аi+2 необходимо выполнить

Аi+2 = ( Ai+1 + ДT ) ∙ 21 - ДT = Ai+1 ∙ 21 + 2ДT - ДT = Ai+1 ∙ 21 + ДT.

Из этого следует, что восстанавливать остаток не обязательно. Достаточно сдвинуть полученный отрицательный остаток влево на один разряд и добавить делитель. Это является основой алгоритма для выполнения деления без восстановления остатка.

Алгоритм деления без восстановления остатка.

1. Выполняется пробное вычитание с формированием первого остатка A1=[Дм]доп+[-Дм]доп. Далее, если А1 < 0, то в первый разряд, расположенный слева от запятой заносится ноль (0, ), иначе единица (1, ) – переполнение и переход к пункту 5.

2. Формирование очередного остатка. Если Аi < 0, то Ai+1=Ai∙2+[Дм]доп, иначе Ai+1=Ai∙2+[-Дм]доп.

3. Если Аi+1 < 0, то в очередной разряд частного справа от запятой записывается ноль (Чт(n)=0), иначе записывается единица (Чт(n)=1).

4. Если достигнута заданная точность частого или получен нулевой остаток Ai+1, то процесс деления окончен и переход к пункту 5, иначе переходим к пункту 2 алгоритма.

5. Окончание алгоритма.

Деление чисел в дополнительных кодах.

При делении чисел знаковая и значащая части частного формируются раздельно. Знак частного формируется согласно формулы:

Знак Чт = Знак Дм  Знак Дт.

Основой деления чисел в дополнительных кодах является деление без восстановления остатка. В отличие от деления в прямых кодах, здесь как для определения цифры частного, так и для определения действия сравнивается знак делимого (остатка) со знаком делителя.

Ниже приведен алгоритм деления чисел в дополнительных кодах.

1. Выполняется пробное вычитание: если знак Дм  знаку Дт, то первый остаток A1=[Дм]доп+[Дм]доп, иначе A1=[Дм]доп+[-Дм]доп. Далее формируется первый разряд, расположенный слева от запятой - ноль (0, ) если знак А1  знаку Дт, иначе единица (1, ).

2. Формирование очередного остатка. Если знак Аi  знаку Дт, то Ai+1=Ai∙2+[Дм]доп, иначе Ai+1=Ai∙2+[-Дм]доп.

3. Если знак Аi+1  знаку Дт, то в очередной разряд частного справа от запятой заносится ноль (Чт(n)=0), иначе единица (Чт(n)=1).

4. Если достигнута заданная точность частого или получен нулевой остаток Ai+1, то процесс деления окончен, иначе переходим к пункту 2 алгоритма.

Пример: Дм = - 0.1011 [ Дм ]доп = 1.0101

Дт = 0.1101 [ Дт ]доп = 0.1101 [-Дт ]доп = 1.0011

На деление Дм и Дт придут в дополнительном коде

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]