A_O_Melnik_Arkhitektura_komp_39_yuteriv
.pdf
211
Якщо результат, який мав би бути отриманий після додавання, є більшим, ніж може вміститися в даній розрядній сітці, то старший розряд втрачається і така ситуація на зивається втратою результату через переповнення.
Приклади виконання операції додавання двійкових чисел без знаків приведено на рис. 6.7.
0 |
|
1 1 0 |
|
1 0 |
|
1 1 |
|
1 0 |
|
1 1 0 |
|
0 |
|
1 1 |
|||
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
|
1 1 0 |
|
|
1 0 |
|
1 1 0 |
|||
1 0 |
|
1 0 |
|
1 1 0 |
|
0 |
|
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
||
|
|
|
|
|
|
|
|
| |
П е р е п о в н е н н я [ |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 6.7. Приклади виконання операції додавання двійкових чисел без знаків
Позначимо оператор виконання операції однорозрядного двійкового додавання від повідно до табл. 6.5 знаком суми, як це показано на рис. 6.8.
Хі У'
Сі+1 X
Рис. 6.8. Оператор однорозрядного двійкового додавання
Тут 8. - і-й розряд суми, х, у. - і-ті розряди першого та другого доданків відповідно, с. та с - відповідно і-й та (і+1)-й розряди переносу. Тоді граф алгоритму п-розрядного додавання буде мати вигляд, показаний на рис. 6.9. Показаний на рис. 6.9. алгоритм на зивається алгоритмом додавання двійкових чисел з послідовним переносом, оскільки перенос проходить через всі оператори однорозрядного двійкового додавання.
|
|
|
|
\1 |
|
|
Хп-2 уп-2 |
хо |
уо |
||
1 |
11 |
|
|
|
|
||||||
|
|
|
|||||||||
|
|
|
|
|
|
|
|
||||
•* |
|
|
|
X |
|
Сп-1 |
1 |
|
|
- X |
X |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 6.9. Граф алгоритму п-розрядного додавання двійкових чисел з послідовним переносом
Вхідними даними тут є двійкові числа х ,, х _, |
х0 та у , у , |
у0 , а вихідним |
|
- двійкове число Б ,, $ |
50 , яке є сумою вхідних чисел. Показаний алгоритм додаван |
||
ня є доволі простим. Недоліком представленого алгоритму є його суттєва часова склад ність, тобто велика кількість операцій, які знаходяться на критичному шляху, оскільки
272
для отримання останнього розряду суми перенос повинен бути сформованим всіма опе раторами однорозрядного двійкового додавання. Для зменшення кількості операцій, які знаходяться на критичному шляху, створено ряд алгоритмів додавання, в яких скороче но кількість послідовних операцій при формуванні переносу. Це здійснюється шляхом паралельного формування переносів для всіх розрядів (так званий прискорений пере нос), або паралельного формування переносів для груп розрядів (так званий частковоприскорений перенос), або використання алгоритму за методом вибору переносу.
6 . 4 . 2 . Додавання двійкових чисел із знаками
Як ми вже бачили в попередньому розділі, існує чотири методи представлення п-роз- рядних чисел із знаками: в прямому, оберненому та доповняльному кодах, а також із зміщенням. В прямому коді старший розряд представляє знак числа, а наступні п-1 роз ряди представляють модуль числа. В оберненому та доповняльному кодах додатні числа мають те ж саме представлення, що і в прямому. Представлення ж від'ємних чисел тут є іншим. В оберненому коді від'ємні числа представляються шляхом інверсії їх розря дів, а в доповняльному коді крім того до молодшого розряду оберненого коду додається одиниця. В представленні із зміщенням всі числа, як додатні так і від'ємні, додаються до зміщення і отримані суми представляються як звичайні числа без знаків. Так від'ємне число к буде представлене як к + Ь > - 0, де Ь - зміщення. Типовим значенням зміщення вибирається число 2П - 1.
Приклад: використовуючи чотирирозрядну сітку (п = 4), представимо в описаних вище кодах число к = - 3 (або в двійковій системі к = - 01Ц). В прямому коді к = 10112, причому старший розряд є знаковий. В оберненому коді к =11002 , а в доповняльному коді к = 11012- Для системи із зміщенням, коли зміщення Ь=2" - 1=8, маємо к = 01012 .
Додавання чисел, представлених в прямому коді, вимагає проведення початкового аналізу знаків чисел. Якщо знаки однакові, то модулі чисел додаються, а результату при своюється їх знак до проведення додавання. Якщо ж їх знаки різні, то модулі чисел відні маються, а результату присвоюється знак більшого за модулем числа, або знак "+", якщо модулі чисел є рівними.
Додавання чисел, представлених в оберненому та прямому кодах, не залежить від їх знаків і проводиться так само як додавання додатних чисел в прямому коді з тією різ ницею, що при додаванні чисел, представлених в оберненому коді, необхідно перенос з старшого розряду подавати на вхід переносу молодшого розряду. Представлення в до повняльному коді використовується значно ширше, ніж в оберненому, оскільки при до даванні чисел тут перенос із старшого розряду просто ігнорується. Наприклад, додавши 5+(-2) в доповняльному коді маємо 01012 + 11102 = 00112 . Тобто отриманий правильний результат 3 при ігноруванні переносом із старшого розряду. Якщо ж додати ті ж самі числа в оберненому коді отримаємо 01012 + 11012 + 1 = 00112 . Тобто також отриманий правильний результат 3 при врахуванні переносу із старшого розряду. Цей перенос називається циклічним . Додавання до отриманої суми одиниці циклічного переносу не викликає повторного циклічного переносу. Наведений приклад наглядно ілюструє рис. 6.10.
214
Таблиця 6.6
ь. |
X. |
Уі |
Б |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
Де: 5 - і-й розряд різниці, х, у. - і-ті розряди зменшуваного та від'ємника відповідно, Ь. - розряд запозичення.
Приклади виконання операції віднімання двійкових чисел без знаків приведено на рис. 6.12.
0 |
1 1 1 і 0 0 1 1 |
1 о 11 1 і 0 |
|
0 1 1 |
|||||||||||||
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
|
1 |
1 |
0 |
1 |
0 |
|
1 |
1 |
0 |
0 |
0 |
|
1 0 |
1 |
1 |
1 |
0 |
1 1 0 |
1 |
|
1 |
1 |
0 |
1 |
|||
Переповнення
Рис. 6.12. Приклади виконання операції додавання двійкових чисел без знаків
Коли числа представлені в оберненому або доповняльному кодах, то можна використа ти інший метод: потрібно змінити знак від'ємника, всі його розряди потрібно інверту вати, а для доповняльного коду, крім того, збільшити від'ємник на одиницю молодшого розряду, і тоді просто додати до зменшуваного отримане число Б = х + (ЫОТ(у) + 1 м.р.).
6.4.4. Множення двійкових чисел
Множення може проводитись в прямому, оберненому та доповняльному кодах. Знак результату операції множення можна визначати окремо. Для цього використовується операція ХСЖ над знаковими розрядами співмножників відповідно до табл. 6.7.
Таблиця 6.7
знак X |
знак У |
Знак |
|
результату |
|||
|
|
||
|
|
|
|
0 |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
При виконанні множення двох операндів однакової розрядності розрядність резуль тату збільшується вдвічі, порівняно з розрядністю множників.
При виконанні множення операндів, представлених в прямому коді, їх модулі мно жаться як цілі двійкові числа без знаків, або як дробові числа без знаків, оскільки про-
215
цедура множення в обох випадках та ж сама. При виконанні множення операндів, пред ставлених в оберненому коді, всі розряди від'ємних чисел потрібно інвертувати, а далі проводити множення так само, як над даними, представленими в прямому коді. Разом з тим, потрібно зауважити, що існують методи прямого множення операндів, представле них в обернених кодах.
6.4.4.1.Множення цілих двійкових чисел без знаків
Якщо позначити множене буквою X, а множник буквою У, причому представити У у вигляді суми його двійкових розрядів
то результат Ъ множення двох цілих двійкових чисел без знаків визначається з ви разу:
2= ХУ = Уі2' = ХУ0 2° + ХУХ 2і +... + ЛТ„_, 21 "ч )
3наведеного виразу видно, що операція множення двійкових чисел зводиться до операції логічного множення множеного (множене - перший множник) на розряди множника та підсумовування отриманих результатів з їх зсувом на кількість розрядів, рівну відповідному показнику ступеня у виразі. Граф алгоритму множення має вигляд, показаний на рис. 6.13.
Y0 |
Y1 |
Y2 |
Y(n-1) X |
I X Y
Рис. 6.13. Граф алгоритму множення
Лінійка операторів A N D формує п n - розрядних результатів логічного множення множеного на розряди множника, які зсуваються праворуч на R. (і = 1, 2, п-1) роз рядів. Ці результати називаються частковими добутками. Оператор із знаком додавання тут означає багатомісну операцію додавання часткових добутків.
216
6.4.4.2. Багатомісна операція додавання часткових добутків
Алгоритм виконання багатомісної операції додавання часткових добутків залежить від типу використовуваних операторів додавання. Це можуть бути зокрема оператори попарного п-розрядного додавання двох чисел, оператори попарного однорозрядного додавання двох чисел, оператори багатомісного паралельного додавання чисел і т. д. Якщо використовувати оператори попарного п-розрядного додавання двох чисел, тобто двох часткових добутків, то можуть бути запропоновані наступні алгоритми:
•алгоритм послідовного попарного додавання часткових добутків, отриманих по чинаючи з аналізу молодших розрядів множника;
•алгоритм послідовного попарного додавання часткових добутків, отриманих по чинаючи з аналізу старших розрядів множника;
•алгоритм паралельного попарного додавання часткових добутків з використан ням структури бінарного дерева.
Граф алгоритму послідовного попарного додавання часткових добутків, отриманих починаючи з аналізу молодших розрядів множника, показаний на рис. 6.14.
Х У ( г И ) |
Х У 4 |
Х У з Х У г Х У і |
Х У о |
||
Цп-1) |
14 |
1.3 |
12 |
1" |
К |
|
|
||||
ОДД 1
ОДД2
ОДД З
ОДД 4
1
ОДД(п-1)
Т
7лпЛ 2п-1 2а 2-і 22 2: 2о
Рис. 6.14. Граф алгоритму послідовного попарного додавання часткових добутків, отриманих починаючи з аналізу молодших розрядів множника
Тут послідовно з'єднані оператори двомісного (попарного) додавання (ОДД), причо му часткові добутки подаються для додавання із зміщенням на і (1^, Ц, .. Ь( п ,.) розря дів ліворуч. Молодший розряд результату кожного і-го ОДД (ОДД ] ; О Д Д , , О Д Д ( п ) є відповідним розрядом добутку Ъ., а нульовий розряд добутку є рівним молодшому роз
ряду першого часткового добутку. Розряди добутку від Х2п - г о до |
-то отримуються з |
виходів (п-І)-го оператора ОДД, починаючи з другого виходу. |
|
Подібним до розглянутого є алгоритм послідовного попарного додавання часткових добутків, отриманих починаючи з аналізу старших розрядів множника, граф якого по казано на рис. 6.15.
277
Х У ( п - і) |
ХУ(п-2) ХУ(п-З) ХУ(п-л) |
ХУ(п-5) |
Х У с |
||
і |
І" |
Я2 |
яз |
|
Я (п-1) |
|
|
|
|||
ОДД 1
ОДД 2
ОДД з
ОДД 4
ОДД (п-1) |
т |
|
ЗЬп-1 |
||
|
Рис. 6.15. Граф алгоритму послідовного попарного додавання часткових добутків, отриманих починаючи з аналізу старших розрядів множника
Різниця в тому, що тут часткові добутки зміщуються на і (1^, Я2 , . ...Рч., Я( п ) розрядів праворуч, а це вимагає розширення на один біт розрядності кожного і-го ОДД в порів нянні з (і-І)-м.
Обидва розглянуті алгоритми вимагають виконання послідовно п-1 додавання, тоб то послідовного виконання ОДД, причому в другому алгоритмі ОДД є обчислювально складнішими.
Алгоритм паралельного попарного додавання часткових добутків з використанням структури бінарного дерева вимагає виконання лише \ogri послідовних додавань за ра хунок розпаралелення обчислень. Граф цього алгоритму показано на рис. 6.16.
ХУ( п-і) ХУ ( п - 2) |
Х У 3 |
Х У 2 |
Х У і |
Х У о |
||||||
| ц п - 1 ) | ц п - 2 ) |
^ 3 |
||_2 |
,1" |
1, |
||||||
|
|
|
|
|
|
|
|
|
|
|
І ОДД п/2 І • |
|
|
ОДД 2 |
ОДД1 |
|
|||||
|
ОДД п/4 |
|
|
|
|
|
ОДД п£/2-1 |
|
||
|
|
і |
|
|
|
і _ |
|
|
||
|
|
|
|
ОДД (п- |
1) |
|
|
|||
Рис. 6.16. Граф алгоритму паралельного попарного додавання часткових добутків з використанням структури бінарного дерева
При цьому на рис. 6.16 часткові множники зміщуються ліворуч, як на рис. 6.14, хоча їх можна змістити і праворуч, як на рис. 6.15.
Найчастіше в якості операторів додавання в алгоритмах виконання багатомісної операції додавання часткових добутків використовується оператор двомісного однороз-
219
В наведеному алгоритмі знаком суми з трьома входами позначено оператор вико нання повного однорозрядного двійкового додавання, представлений на рис. 6.8, де аЬ - вхідні дані; г. - сума, а знаком суми з двома входами (три крайні зліва оператори) позначено оператор виконання неповного однорозрядного двійкового додавання, коли відсутній вхідний перенос, що спрощує алгоритм додавання. Цей оператор виконує опе рації відповідно до табл. 6.8. На рис. 6.18 переноси не позначено з метою спрощення сприйняття.
Таблиця 6.8
X |
У, |
Z |
Си, |
01 |
0 |
0І |
0 |
0 |
1 |
1 |
0 |
і |
0 |
1 |
0 |
і |
1 |
0 |
1 |
Його роботу можна описати наступними формулами:
Z= х. XOR у.
с., = х AND у.
Обчислювальна складність даного алгоритму рівна: п2 - п операцій двомісного од норозрядного двійкового додавання [п2 - 2п операцій повного та п операцій неповно го двомісного однорозрядного двійкового додавання). Кількість операторів двомісного однорозрядного двійкового додавання на критичному шляху рівна Зп - 4.
Виконання багатомісної операції додавання часткових добутків з діагональним роз повсюдженням переносу показано на рис. 6.19. Цей алгоритм також синтезований на основі графа алгоритму послідовного попарного додавання часткових добутків, отрима них починаючи з аналізу молодших розрядів множника, який показаний на рис. 6.14.
|
|
|
|
U |
11 |
|
И |
|
|
||||
|
|
|
|
а.Ь, |
|
аф„ |
о,Л |
а,Л, |
u.:hD |
a.bt |
uQb, |
*/„/>, aj^ |
|
|
|
aj>. ah. |
X |
і — x |
|
H |
|
x |
4- |
x |
|||
|
|
il |
1 |
|
|
A |
|
|
|
|
|
||
"A |
|
X |
x * J |
|
X |
|
|
|
X |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
X |
|
X |
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 6.19. Граф алгоритму паралельного матричного виконання багатомісної операції додавання часткових добутків з діагональним розповсюдженням переносу
Обчислювальна складність даного алгоритму рівна: п2 - п операцій двомісного од норозрядного двійкового додавання (п2 - 2п операцій повного та п операцій неповного двомісного однорозрядного двійкового додавання). Кількість операторів двомісного од норозрядного двійкового додавання на критичному шляху рівна 2п - 2.
Подібним чином можна побудувати алгоритми виконання багатомісної операції до давання часткових добутків з послідовним та діагональним розповсюдженням переносу
22 7
6.4.4.4. Прискорене множення двійкових чисел за методом Бута
Особливістю цього методу є те, що аналізуються відразу два розряди множника. Цей метод широко застосовується. Пришвидшення досягається тим, що при обрахуванні до бутку за цим методом зменшується кількість додавань. Суть методу можна виразити наступними формулами для обчислення часткових добутків:
|
якщо |
У(,.м ) ="01"; |
\2 = |
якщо |
Ї{ІМ] ="10"; |
|
якщо |
7 ( . М ) = " 0 0 " , " П " ; |
20=0; і = 0 , я - 1 ; Г И ) = 0 ; 2п=2 = ХУ,
де: X, У, Ъ - множене, множник і добуток відповідно, 7л - сума часткових добутків на і-му етапі, У(і, і-1) - і-й та і-1 розряди множника, п - кількість розрядів операндів X та У без врахування знакового розряду.
Можна проілюструвати цей алгоритм за допомогою блок-схеми, показаної на рис. 6.21.
(^початок)
1*
-0;
2: =0;
і
|
и |
|
|
1 |
|||
V |
|
|
|
|
|
2 + ,:=2,Х |
|
|
|
|
|
|
1+1 |
1 |
|
|
|
|
|
|
|
|
|
Рис. 6.21. Блок-схема множення двійкових чисел за методом Бута
Тут знаком ирифм •» позначена операція арифметичного зсуву праворуч.
