Реализация команды умножения чисел проводится путем пошагового сложения сдвигаемого значения множимого и частичной суммы при наличии ненулевого бита соответствующего разряда множителя. Существует большое множество различных алгоритмов умножения, но в данной лабораторной работе рассматриваются основные четыре типа.
1. Данный алгоритм характеризуется тем, что для множимого, множителя и частичной суммы используются регистры одной величины. Результат (произведение) при этом хранится в паре, соответствующей частичной сумме и множителя, которое постепенно заполняется нулями, при чем старшая часть хранится в регистре частичной суммы, а младшая - в регистре множителя.
Пусть А – множимое, В – множитель, D – частичная сумма.
Пример:
Пусть A = 610 = 01102 (множимое); B = 310 = 00112 (множитель);
D = 00002 (частичная сумма)
№ такта | Действие | Флаг [C] | |
Сдвиг В вправо | B = [0]001|1 | ||
[C] = 1, след. прибавляем множимое к частичной сумме | D = D + A | ||
Сдвиг D вправо | D = [0]011|0 | ||
Сдвиг В вправо | B = [0]000|1 | ||
[C] = 1, след. прибавляем множимое к частичной сумме | D = D + A | ||
Сдвиг D вправо | D = [0]100|1 | ||
Сдвиг В вправо | B = [1]000|0 | ||
Сдвиг D вправо | D = [0]010|0 | ||
Сдвиг В вправо | B = [0]100|0 | ||
Сдвиг D вправо | D = [0]001|0 | ||
Сдвиг В вправо | B = [0]010|0 | ||
Сдвиг D вправо | D = [0]000|1 | ||
Сдвиг D влево | D = 0|000[1] |
Результат в D:B : 0001 : 0010. Нетрудно видеть, что 000100102 = 1810.