Перший основний алгоритм множення
Використовує добуток Z=X*Y у вигляді
Z=X*Y=хn∙2-n∙Y+ хn-1∙2-n∙Y+…+ х2∙2-n∙Y+ х1∙2-n∙Y=
((…((0+ хn∙Y)∙2-1+ хn-1∙Y)∙2-1+…+x2∙Y)∙2-1+x1∙Y)∙2-1
Звідси слід, що добуток Z за допомогою рекурентної формули можна записати
де Z0 = 0; Zn = Z, Zi – сума часткових добутків.
Множення тут починається з молодших розрядів множника, на кожному кроці множення сума часткових добутків зсувається вправо, кількість кроків множення дорівнює n, останній крок закінчується зсувом. ГСА такого множення має вигляд
Рис.1. Перший алгоритм множення у прямому коді
xn* – цифра в молодшому розряді регістру множника РХ на даному кроці множення (“поточна” цифра множника)
СТК – лічильник числа кроків множення.
Довжина регістрів операндів складає n – розрядів, регістрів результату – 2n розрядів.
Приведемо цифрову діаграму станів регістрів при множенні чисел Х = 11/16 та Y = 9/16, n = 4 відповідно схемі алгоритму.
PX xn* |
PY |
|
PZ |
СТК |
Пояснення |
1011
0101
0010 0001
0000 |
1001 |
+ |
00000000 1001 |
000
001
010 011
100 END |
Початковий стан +Y Результат сумування Зсув +Y Результат сумування Зсув Зсув +Y
Результат сумування Зсув |
|
10010000 01001000 1001 |
||||
+ |
|||||
|
11011000 01101100 00110110 1001 |
||||
+ |
|||||
+ |
11000110 01100011
|
Час множення по даному алгоритму визначається за формулою
Т=n(tз+ t+) |
tз – t зсуву t+ - t сумування |
Другий основний алгоритм множення
Операція множення по другому алгоритму зводиться до обчислювання за рекурентною формулою
де
Регістр множника повинен мати довжину в n розрядів, регістри множеного та суми часткових добутків – по 2n розрядів. Перед початком множення множене повинно бути записано в відповідний регістр зі зсувом вправо на n розрядів для того, щоб було сформовано значення Yn. ГСА такого множення показана на рис.2. Початкове встановлення лічильника в одиницю зумовлене тим, що значення Yn вже сформовано при запису його в регистр множеного.
Приведемо приклад цифрової діаграми множення чисел Х = 13/16 та Y = 12/16, n = 4.
PX xn* |
PY |
|
PZ |
СТК |
Пояснення |
1101
0110 0011
0001 |
00001100
00011000 00110000
01100000 |
+ |
00000000 00001100 |
001
010 011
100
END |
Початковий стан +Y Результат сумування Зсув Зсув +Y Результат сумування Зсув +Y Результат сумування |
|
00001100 00001100 00001100 00110000 |
||||
+ |
|||||
|
00111100 00111100 01100000 |
||||
+ |
|||||
|
10011100
|
Час множення по даному алгоритму визначається за формулою
Т=(n-1)(tз+ t+)+ t+ |
tз – t зсуву t+ - t сумування |