Сдвиг через последовательность единиц прекращается на первом нуле. Если сразу за этим нулем расположена единица, то множимое вычитается и выполняется сдвиг через последовательность единиц. Если за этим нулем непосредственно следует второй нуль, то множимое прибавляется, а затем выполняется сдвиг через последовательность нулей, который прекращается на первой единице.
Если за этой единицей следует ноль, то множимое прибавляется и производится сдвиг через последовательность нулей. Если за этой единицей непосредственно следует вторая единица, то производится вычитание множимого с соответствующим весом данного разряда, а затем выполняется сдвиг через последовательность единиц. Если в старшем разряде множителя стоит 1, входящая в последовательность единиц, то сдвиг необходимо продолжать до первого нуля после старшего разряда множителя.
Следует отметить, что при умножении со старших разрядов применяются несколько другие правила определения оптимального множителя. И в том и в другом случае в среднем на каждую операцию сложения выполняется сдвиг на 2,9 разряда, если схема рассчитана на сдвиг не более, чем на 6 разрядов одновременно.
В пределе среднее число сложений-вычитаний, приходящееся на один разряд множителя, равно 3-1. Это наилучший результат, которого можно достичь при использовании логических методов.
Таким образом, переход от одной разновидности двоичной системы счисления к другой при преобразовании множителя позволяет получить выигрыш во времени выполнения операции в целом. При этом возникают определенной длины последовательности 0 или 1, что, в конечном счете, приводит к необходимости одновременного анализа нескольких разрядов множителя и сдвига на произвольное число разрядов.
Одновременное умножение на два разряда.
Количество циклов, необходимых для реализации в ЭВМ операции умножения, можно сократить, если в каждом цикле анализировать не один, а два или более разрядов множителя, выполняя после анализа одну передачу множимого в сумматор и сдвиг множителя на соответствующее число, т.е. два или более, разрядов. Для организации ускоренного умножения множитель можно разбить на группы по два разряда и преобразовать его таким образом, чтобы каждая группа содержала не более одной единицы, понимая под последней 1 или
.Для младшей пары разрядов при умножении с младших разрядов возможны следующие комбинации единиц и нулей в разрядах: 00, 01, 10 и 11.
Для первой комбинации не производится ни сложение, ни вычитание, для второй - суммирование множимого, для третьей - суммирование сдвинутого на 1 разряд влево множимого, т.е. умноженного на два, а для четвертой - вместо двух сложений при умножении без ускорения выполняется одно вычитание множимого и одно сложение после сдвига множимого на 2 разряда, т.е. пара разрядов множителя преобразуется к виду 10
. Поскольку сложение после сдвига приходится на умножение на следующую пару разрядов, то вместо того, чтобы его выполнять добавляют единицу в следующую за данной пару разрядов. С учетом этого действия при умножении выполняются в соответствии с таблицей 2.Описанная процедура повторяется для всех пар разрядов множителя, а также для одной пары разрядов левее запятой, т.к. может оказаться необходимым добавить к ней (к ее нулям) единицу.
Таблица 2
Анализируемая пара разрядов | Перенос из предыдущей пары разрядов | Преобразованная пара разрядов | Примечание |
00 | 0 | 00 | |
01 | 0 | 01 | |
10 | 0 | 10 | Предварительный сдвиг множимого |
11 | 0 | 01 | Запоминается 1 для следующей пары разрядов |
00 | 1 | 01 | |
01 | 1 | 10 | Предварительный сдвиг множимого |
10 | 1 | 01 | Запоминается 1 для следующей пары |
11 | 1 | 10 | разрядов |
Следует отметить, что в общем случае при умножении на 2 разряда множителя двух знаковых разрядов в сумматоре недостаточно. Здесь возможны случаи при А →1, когда даже во втором знаковом разряде появляется единица переполнения, т.е. будет искажен знак частного произведения. Следовательно, при данном способе умножения сумматор должен иметь три знаковых разряда.
Следует отметить, что объем оборудования АУ при умножении на 2 разряда увеличивается незначительно по сравнению с АУ, работающим без ускорения.
Одновременное умножение на три и более разряда, для реализации которого применим подобный способ ускорения, используется реже, так как при этом увеличивается количество требуемых типов передач. Это приводит к значительному усложнению схем, реализующих умножение.
4. Матричный метод умножения
Когда множимое и множитель расположены в регистрах машины, нетрудно образовать сразу все частичные произведения. Следовательно, при наличии дополнительных сумматоров можно складывать сразу несколько частичных произведений, а в предельном случае и все. В этом случае формирование произведения можно себе представить как спуск по дереву сумматоров от слагаемых к их общей сумме. Время спуска по дереву будет зависеть от его организации и типа применяемых сумматоров. Рассмотрим схему умножения на примере двух четырехразрядных чисел:
А= | а4 | а3 | а2 | а1 | |||
В= | b4 | b3 | b2 | b1 | |||
a4b1 | a3b1 | a2b1 | a1b1 | ||||
a4b2 | a3b2 | a2b2 | a1b2 | ||||
a4b3 | a3b3 | a2b3 | a1b3 | ||||
a4b4 | a3b4 | a2b4 | a1b4 | ||||
c8 | c7 | c6 | c5 | c4 | c3 | c2 | c1 |
Эту схему умножения можно представить в виде матрицы (таблица 3), каждый элемент которой равен 0 или 1 для р=2. Для получения произведения двух чисел элементы матрицы надо суммировать в соответствии с порядком.
Таблица 3
аi | ||||
bi | а4 | а3 | а2 | а1 |
b1 | a4b1 | a3b1 | a2b1 | a1b1 |
b2 | a4b2 | a3b2 | a2b2 | a1b2 |
b3 | a4b3 | a3b3 | a2b3 | a1b3 |
b4 | a4b4 | a3b4 | a2b4 | a1b4 |
a3b2 | a4b1 | a2b2 | a3b1 | a1b2 | a2b1 | a1b1 | ||||||||
С | м | С | м | С | м | |||||||||
a3b3 | a4b2 | a2b3 | a1b3 | C1 | ||||||||||
С | м | С | м | С | м | C2 | ||||||||
a4b4 | a3b4 | a4b3 | a2b4 | a1b4 | ||||||||||
С | м | С | м | С | м | |||||||||
C3 | ||||||||||||||
П | а | р | а | л | л | е | л | ь | н | ы | й | с | у | м. |
C8 | C7 | C6 | C5 | C4 |
Рисунок 1- Схема устройства для реализации матричного метода
Элементы, составляющие каждый і-й столбец матрицы, просуммируем с помощью обычных трехвходовых двоичных сумматоров. 3начения переносов с этих сумматоров должны быть слагаемыми для (i+1)-гo столбца. Это приведет к тому, что в каждом (i+1)-м столбце появление слагаемых будет происходить с запаздыванием по времени относительно i-гo столбца.
Схема устройства для реализации этого дерева спуска, которое представляет собой одну из разновидностей матричного алгоритма умножения, представлена на рис. 1.
Для одноразрядных сумматоров время образования суммы больше, чем время образования переноса τп, поэтому наибольшее время спуска по дереву данного вида есть Туск= (n-1)(τсмì+τn); если только все конъюнкции вида aibjпоступают на дерево спуска одновременно. Это время складывается из спуска по самой длинной вертикали, а затем последовательного распространения переноса через сумматоры нижнего ряда вплоть до самого левого. Рассмотренная структура дерева спуска не единственная Время спуска можно еще уменьшить, преобразовав дерево спуска.
Операция деления встречается сравнительно редко (Р=0,02), однако, реализация ее по подпрограмме занимает достаточно большое время. Поэтому в большинстве современных ЭВМ деление реализуется специальными операционными блоками.
Деление в ЭВМ, также как и умножение, проще всего выполняется в прямом коде. Но в отличие от умножения дробных чисел, где не может возникнуть переполнение разрядной сетки, при делении правильных дробей такое переполнение возможно в случае, когда делимое больше делителя. Признаком переполнения является появление целой части в частном, что грубо искажает результат.
Знак частного при делении определяется сложением по модулю 2 знаковых разрядов делимого и делителя и присваивается частному в конце операции деления.
Частное определяется путем деления модулей исходных чисел. При этом во избежание переполнения разрядной сетки должно соблюдаться условие: