Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АРИФМ. ОСНОВЫ ЭВМ.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.63 Mб
Скачать

2. Старорусский метод удвоения-деления пополам

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

Операнды представлены в коде с естественными весами 8-4-2-1 и при сдвигах как влево, так и вправо необходима коррекция.

Сдвиг влево требует такой же коррекции, как и при алгебраическом сложении: для «неправильных» тетрад и для тетрад, из которых сформировались единицы переноса, нужна коррекция кодом +610=01102.

Сдвиг вправо требует коррекции кодом -310=11012 для тетрад, в которые сформировались единицы переноса. Этот корректирующий код образуется как разность между результатом деления пополам 16-ти и нужным результатом деления пополам 10-ти: 8-5=3. Эту разность надо вычесть из тетрад, в которые сформировались единицы переноса.

Основной недостаток метода – невысокое быстродействие из-за множества коррекций.

Пример.

Перемножить десятичные числа 43*38, считая число 43 множителем, и использовать для кодирования десятичных цифр код с естественными весами 8-4-2-1 и старорусский метод умножения.

4310=1010112=0100.0011.2-10; 3810=0011.1000.2-10

В соответствии с алгоритмом множимое должно сдвигаться влево, поэтому регистр множимого должен иметь дополнительные разряды. Кроме того, операнды положительные – опускаем операцию со знаками.

Множитель

Множимое

Сумма частичных произведений

0100.0011.

0000.0000.0011.1000.

.0000.0000.0011.1000.

0010.0001

0000.0000.0111.0000.

.0110.

0000.0000.0111.0110.

.0000.0000.0011.1000.

0000.0000.0111.0110. 0000.0000.1010.1110.

.0110.0110.-коррекция 0000.0001.0001.0100.

0001.0000.

0000.0000.1110.1100.

.0110.0110.

0000.0001.0101.0010.

0000.1000.

.1101.

0000.0101.

0000.0010.1010.0100.

.0110.____

0000.0011.0000.0100.

0000.0001.0001.0100.

0000.0011.0000.0100.

0000.0100.0001.1000.

0000.0010.

0000.0110.0000.1000.

0000.0001.

0000.1100.0001.0000.

.0110. .0110.

0001.0010.0001.0110.

0000.0100.0001.1000.

0001.0010.0001.0110.

0001.0110.0010.1110.

.0110.-коррекция

0001.0110.0011.0100.

0000.0000.

1 6 3 4

Примечание.

Цифры в младшем разряде множителя после очередного сдвига и коррекции, взятые в обратном порядке, образуют представление множителя в двоичной системе счисления (в таблице эти цифры выделены жирным шрифтом и подчёркнуты). Этот способ можно использовать для перевода чисел из двоично-десятичной системы счисления в двоичную систему счисления: 4310=01010112.