![](/user_photo/2706_HbeT2.jpg)
5.3. Алгоритми множення в доповняльному коді без
корекції в кінці операції множення
З викладеного випливає, що для корекції результату множення доповняльних кодів операндів необхідно в кожнім випадку за комбінацією знаків операндів визначати величину корекції, а потім виконувати один - два кроки підсумовування. Однак цього можна уникнути, якщо корекцію об’єднати з процесом підсумовування часткових добутків. Розглянемо можливі варіанти реалізації такого об’єднання.
1.Якщо
,
то їхній добуток повинен бути від’ємним
і представленим доповняльним кодом.
Тоді можна записати, що
.
Тут кожен частковий
добуток вигляду
дорівнює або 0, або
.
Відомо, що доповняльний код суми декількох
операндів дорівнює сумі доповняльних
кодів цих самих операндів. Отже, якщо
зсув множеного вправо на
розрядів виконувати за правилами зсуву
модифікованого додаткового коду, а
потім виконати підсумовування часткових
добутків за правилами підсумовування
доповняльних кодів (із втратою одиничного
переносу зі знакового розряду), то буде
отриманий правильний добуток вихідних
чисел у доповняльному коді, тобто, у
цьому випадку
.
Таким чином, при виконанні зазначених
правил не потрібно додаткових кроків
для корекції добутку.
2. При від’ємному
множнику Х
і додатному множеному Y,
як показано вище для випадку множення
доповняльних кодів операндів з урахуванням
їх знаків, псевдодобуток має вигляд
.
Разом з тим, частковий добуток, який
формується при множенні на знакову
цифру множника, дорівнює
.
Отже, якщо при множенні на знакову цифру
множника не додавати останній частковий
добуток до їхньої суми, а відняти його,
то тим самим
буде зменшене на
.
Більше того, якщо для представлення
від’ємного останнього часткового
добутку скористатися доповняльним
кодом, тобто записати його у вигляді
,
то при його додаванні не тільки буде
відкоректована числова частина добутку,
але і сформується правильний його знак.
На підставі цього можна побудувати
такий алгоритм множення операндів у
доповняльному коді. При від’ємному
множнику вважають його представленим
у надлишковій двійковій системі числення
з цифрами {-1,0,1}, а знаковий розряд множника
– від’ємною цифрою. Далі за звичайною
методикою виконують множення множеного
(разом зі знаковим розрядом) на всі
розряди множника. На останньому кроці
(тобто, при множенні на знаковий розряд)
виконують операцію
замість
.
Якщо ж множник додатний, то його знаковий
розряд не змінюють, а множення на знаковий
розряд виконується як звичайно (можна
вважати, що виконують операцію +0). ГСА
такого
множення на базі
першого основного алгоритму наведено
на рис.1, де
в нижній умовній вершині вказує на
перевірку тут знакової цифри множника.
3. Якщо Х<0,
Y<0, то
корекція результату може бути зроблена
об'єднанням двох попередніх варіантів,
тобто, при множенні на знаковий розряд
множника виконують віднімання, а
підсумовування і зсуву часткових
добутків роблять з використанням
модифікованого додаткового коду.
Очевидно, що час множення в цьому випадку
складе
0 1
0 1
0 1
Рис.1
Приклад 3.
Скласти цифрову діаграму множення чисел
і
в доповняльному коді без корекції в
кінці операції (табл.2). Операцію множення
виконаємо з використанням першого
основного алгоритму.
Для виконання
операції множення знаходимо модифіковані
доповняльні коди операндів:
та величину корекції, яка обчислюється
за формулою
.