ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6845
Скачиваний: 22
207
6.7.4. Виключне АБО
Також цю операцію ще називають додавання за модулем два (XOR), оскільки вона виконує порозрядне додавання вхідних змінних за модулем два. Ця операція виконується як мінімум над двома операндами X та Y. Відобразимо значення функції наступною таблицею істинності (табл. 6.4).
Таблиця 6.4
біт X |
біт Y |
біт результату |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
Приклади виконання операції логічного додавання за модулем два наведено на
рис. 6.3.
6.2. Операції зсуву
6.2.1. Логічні зсуви
При виконанні логічного зсуву праворуч або ліворуч всі розряди слова зсуваються на один розряд у відповідну сторону, в перший розряд записується нуль, а останній розряд випадає (рис. 6.4). Зсуви досить часто використовуються як складові операції при виконанні багатьох алгоритмів обробки даних. Для формату представлення даних без знаків зсув на один розряд ліворуч еквівалентний множенню на два, а на один розряд праворуч - відповідно цілочисельному діленню на два.
208
Команда логічного зсуву має наступні поля: код логічної операції зсуву праворуч або ліворуч, адреса операнда та код зсуву, який вказує величину зсуву, тобто кількість розрядів, на які має бути проведений зсув. Якщо операнд позначити через X, а код зсуву через Y, то результат Z виконання операції буде рівним Z = X 2+/-Y, де знак "+" відповідає зсуву ліворуч, а знак "-" - праворуч.
6.2.2. Арифметичні зсуви
Арифметичні зсуви дуже подібні до попередніх (логічних), але вони мають таку особливість, як розмноження знака при зсуві праворуч та збереження знака при зсуві ліворуч (рис. 6.5).
Такі зсуви також мають зміст множення і ділення на два для формату представлення даних із знаками в оберненому та доповняльному кодах. Вони дозволяють після операції зсуву ліворуч зберегти знак представленого числа та після операції зсуву праворуч зберегти коректний результат ділення на два.
Команда арифметичного зсуву має наступні поля: код операції арифметичного зсуву праворуч або ліворуч, адреса операнда та код зсуву, який вказує величину зсуву, тобто кількість розрядів, на які має бути проведений зсув.
6.2.3. Циклічні зсуви
Циклічний зсув передбачає, що розряди, які витісняються з одного боку операнда, дописуються з іншого його боку (рис. 6.6).
209
Команда циклічного зсуву має наступні поля: код операції циклічного зсуву праворуч або ліворуч, адреса операнда та код зсуву, який вказує величину зсуву, тобто кількість розрядів, на які має бути проведений зсув.
6.3. Операції відношення
6.3.1. Порівняння двійкових кодів на збіжність
Операція порівняння двійкових кодів на збіжність дає логічний результат, рівний одиниці, якщо коди збігаються. В інших випадках значення результату рівне нулю. Виконувана функція визначається наступним булевим рівнянням:
n Z = AND ((X. AND Y) OR (NOT(X) AND NOT(Y))),
i = 0 де і = 0, 1 ... n - номери розрядів чисел X та Y, які порівнюються, Z - розряд результату.
6.3.2. Визначення старшинства двійкових кодів
Операції визначення старшинства двійкових кодів, тобто визначення, яке з двох чисел є меншим, більшим, меншим-рівним, більшим-рівним, виконуються з використанням двійкового віднімання.
Якщо це числа без знаків, то при відніманні першого числа від другого отриманий результат може бути більшим нуля, рівний нулю, або меншим нуля. Тоді, якщо отриманий результат є більшим нуля, то перше число є більшим від другого, якщо отриманий результат рівний нулю, то числа рівні, а якщо отриманий результат є меншим нуля, то друге число є більшим від першого.
Якщо це числа із однаковими знаками, то при відніманні першого числа від другого отриманий результат може бути додатнім, рівним нулю, або від'ємним. Тоді якщо отриманий результат рівний нулю, то числа рівні, при від'ємному результаті перше число є меншим другого, а друге відповідно більшим, а при додатному результаті перше число є більшим, а друге відповідно меншим від першого. Якщо ж це числа із різними знаками, то більшим є додатне число.
210
6.4. Арифметичні операції
Команди обробки даних також ініціюють виконання арифметичних операцій. Це операції додавання, віднімання, множення та ділення над числами, представленими в форматах з фіксованою та рухомою комою. При цьому арифметичні операції також можуть виконуватись як над скалярними даними, так і над векторами.
До арифметичних належать також наступні операції над одиночними операндами:
-
взяття абсолютної величини від операнда;
-
інверсія знака операнда;
-
прирощення операнда на одиницю;
-
зменшення операнда на одиницю.
Методи реалізації арифметичних операцій в комп'ютерах вибирають з врахуванням потрібної швидкодії, формату представлення чисел, системи числення та інших техні-ко-економічних і системних факторів. Критерієм вибору методу зазвичай є досягнення мінімальних затрат обладнання, максимальної швидкодії або оптимального співвідношення затрат обладнання і швидкодії. Існує велика кількість алгоритмів виконання арифметичних операцій в комп'ютері. В даному розділі розглянемо лише основні алгоритми, а питання їх модифікації та реалізації будуть розглянуті в наступних розділах.
6.4.1. Додавання двійкових чисел без знаків
Додавання в двійковій системі числення відбувається подібно до звичайного додавання в десятковій системі. Додаються два розряди, які розміщені у числі на одній позиції. При виникненні переносу він передається в старший розряд і там додається. В загальному додавання можна описати наступними формулами:
Si= xiXOR yiXOR ci
ci-1 = (xiANDyi) OR (хi AND ci) OR (уiAND сi)
де: S. - і-тий розряд суми, х., у. - і-ті розряди першого та другого доданків відповідно, с. - розряд переносу.
Ці формули отримані з наступної таблиці істинності (табл. 6.5).
Таблиця 6.5
сi |
xi |
yi |
Si |
ci+1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
211
Якщо результат, який мав би бути отриманий після додавання, є більшим, ніж може вміститися в даній розрядній сітці, то старший розряд втрачається і така ситуація називається втратою результату через переповнення.
Приклади виконання операції додавання двійкових чисел без знаків приведено на рис. 6.7.
Позначимо оператор виконання операції однорозрядного двійкового додавання відповідно до табл. 6.5 знаком суми, як це показано на рис. 6.8.
Тут Si- і-й розряд суми, хi, уi - і-ті розряди першого та другого доданків відповідно, сi та сi+1 - відповідно і-й та (і+1)-й розряди переносу. Тоді граф алгоритму п-розрядного додавання буде мати вигляд, показаний на рис. 6.9. Показаний на рис. 6.9. алгоритм називається алгоритмом додавання двійкових чисел з послідовним переносом, оскільки перенос проходить через всі оператори однорозрядного двійкового додавання.
Вхідними даними тут є двійкові числа хп1, хn-2, ..., х0 та уn-1, уn-2, ..., у0 , а вихідним - двійкове число Sn-1, Sn-2, ..., S0, яке є сумою вхідних чисел. Показаний алгоритм додавання є доволі простим. Недоліком представленого алгоритму є його суттєва часова складність, тобто велика кількість операцій, які знаходяться на критичному шляху, оскільки