Виконання арифметичних операцій

Основною операцією, яка використовується в цифрових системах при виконанні різних обчислень, є операція алгебраїчного додавання. Вона виконується на основі правил виконання операцій у двійковій системі зображення чисел, які для однорозрядних чисел мають такий вигляд:

+   +   +   +
     
             

Перенесення до старшого розряду виконується тоді, коли в одному розряді обох складових є одиниці. Операція знаходження суми в багаторозрядних числах виконується послідовно, починаючи з молодшого розряду. У зв’язку з цим, починаючи з другого розряду, виконується складання трьох цифр – двох розрядних складових і перенесення з молодшого розряду.

Приклад 1.11. Скласти два додатних двійкових числа А2 = 10012 ; B2 = 11012 .

Розв’язання. При виконанні операції додавання мають місце переповнення у першому і четвертому розрядах і, відповідно, перенесення одиниці з першого розряду у другий і з четвертого у п’ятий.

    Виконання арифметичних операцій - №1 - открытая онлайн библиотека   Виконання арифметичних операцій - №1 - открытая онлайн библиотека    
+ A2 =   = 910
B2 =   = 1310
  (A+B)2 = = 2210

Операція віднімання в цифрових схемах виконується за допомогою операції додавання, зображуючи від’ємник у доповнюючому коді.

Приклад 1.12. Знайти суму двох чисел N = 85410 і K = -38710 з використанням доповнюючого коду.

Розв’язання. При виконанні вказаної операції в десятковій системі числення необхідно для числа Kзнайти відповідний доповнюючий код. Він знаходиться за тими ж правилами, що і в двійковій системі. Зворотній код числа знаходиться як доповнення до дев’ятки цифри кожного розряду. Для числа K = 38710 зворотній код В = 61210 .

Доповнюючий код для числа K

D = В + 1 = 612 + 1 = 613.

Виконаємо операцію додавання. При цьому введемо знакові розряди, які позначимо апострофом, що встановлюється після знакової цифри:

N + D = 0' 854 + 1' 613 = 10' 467 = 467.

Перенесення, що з’являється зі знакового розряду, відкидається.

Аналогічно виконується операція віднімання в двійковій системі числення.

Приклад 1.13. Додати два числа N = 0' 110112 = 2710 і K = 1' 011012 = -1310 .

Розв’язання. Знаходимо додатковий код від’ємного числа K :

D= 1' 10011.

Знаходимо суму:

+ N = 0 '
D = 1 '
  (N + D) = 10 '

Відкидаючи 1 переносу в знаковому розряді, отримуємо:

N + D = 0' 011102 = 1410 .

Приклад 1.14. Змінимо знаки обох чисел на зворотні:

N = -2710 = 1' 110112 ; K = 1310 = 0' 011012 .

Розв’язання. Доповнюючий код від’ємного числа N : D = 1' 001012 .

Знаходимо суму:

+ K = 0 '
D = 1 '
  (K + D) = 1 '

Знаковий розряд показує, що результат операції від’ємний, а число зображене у додатковому коді. Для отримання результату в прямому коді необхідно спочатку перейти до зворотного коду, віднімаючи одиницю від результату виконання арифметичної операції, а потім – інвертувати.

Знаходимо зворотній код результату: 1' 100012 ; прямий код: 1' 011102 = -1410 .

Пряма операція віднімання з використанням операцій зайому зі старших розрядів застосовується лише при порівнянні двох кодів, адже відсутність чи наявність зайому зі старшого розряду дає можливість легко визначити більше з порівнюваних чисел.

Розглянемо тепер особливість виконання операцій у двійково-десятковій системі числення (код 8-4-2-1). Процедура виконання операції здійснюється на основі правил двійкової арифметики. Якщо одержане число перевищує 1010 , то повинна формуватися одиниця переносу, яка передається до наступного десяткового розряду. Але результат відрізнятиметься від правильного, і в нього необхідно внести відповідну корекцію. Наявність у результаті операції числа, що перевершує дев’ятку, легко виявляється за рядом ознак, які читач може сформулювати самостійно.

Приклад 1.15. Скласти числа А = 510 і В= 310 з використанням коду 8-4-2-1.

Розв’язання.

А + В = 01012 + 00112 = 10002 = 810 .

Оскільки результат менше десяти, то корекція не потрібна.

Приклад 1.16. Скласти числа А = 810 = 10002 і В = 910 = 10012 .

Розв’язання.

(А + В)2 = 10002 + 10012 = 10001 = 1710 .

У даному випадку результат більше десяти, тому необхідно вводити корекцію.

Поява одиниці в п’ятому розряді означає, що число, представлене чотирма молодшими розрядами, зменшилось на 16 одиниць. Але, з іншого боку, одиниця передалась у старший десятковий розряд, що еквівалентно числу 10, тому в молодшому розряді недостає шістьох одиниць.

Це означає, що необхідно до результату додати корекцію – шість одиниць, тобто:

+ 1710 = 2  
610 =     2  
  Сума = 2 = 0001 01112/10 = 1710 .

Результат представляється одиницею в розряді десятків і сімкою в розряді одиниць.

Приклад 1.17. Скласти числа 610 + 710 .

Розв’язання.

+ 610 = 2    
710 = 2    
  Сума = 2 = 1310

У цьому прикладі переносу в п’ятий розряд немає, але результат перевершує дев’ятку, і тому необхідно ввести корекцію. Корекція необхідна не тільки для того, щоб скоригувати результат молодших розрядів, а й для того, щоб перенести одиницю в старший десятковий розряд. Знову додасться 10 і відніметься 16, і тому для корекції необхідно додати цифру 6:

+ 1310 =   2  
610 =   2  
  Сума = 2 = 0001 00112/10 = 1310 .

З двох останніх прикладів бачимо, що в першому випадку при виконанні операції має місце перенесення в старшу тетраду, що і може виступати ознакою необхідності введення корекції результату. В другому випадку такого перенесення немає, і тому можливість такого результату або необхідно передбачати, або створювати допоміжні заходи для введення корекції. Як вихід з такої ситуації, можна запропонувати використання самокоригуючих кодів – наприклад, коду “з надлишком 3”.

Приклад 1.18. Виконати операцію знаходження суми двох чисел з попереднього прикладу при використанні коду “з надлишком 3”.

Розв’язання. Відповідні коди чисел: 610 = 1001; 710 = 1010. Після виконання операції додавання маємо результат:

1001 + 1010 = 100112/10 = 0001 00112/10 = 1310 .

При використанні інших кодів для зображення десяткових цифр правила знаходження суми зміняться, але логічний аналіз процедури легко дозволяє знайти правила корекції.

При знаходженні суми багаторозрядних двійково-десяткових чисел від’ємні числа зображуються у зворотному або додатковому коді. При цьому зворотній код одержується доповненням до 9. Якщо використовувати не код 8-4-2-1, а коди “з надлишком 3” або 2-4-2-1, то процедура формування доповнення до 9 значно спрощується.

Виконання операцій множення або ділення двійкових чисел на 2j = 2, 4, 8, … досягається шляхом зсуву цифр числа відповідно вправо або вліво на j = 1, 2, 3, … розрядів.

Для довільних чисел виконання операції множення зводиться до послідовного виконання операцій додавання та зсуву.

Приклад 1.19. Виконати множення двох чисел: А = 1012 ; В = 0112 .

Розв’язання.

× A =   = 510
B =   = 310
+ D1 =      
D2 =      
  Сума = = 1510

Спочатку виконується знаходження часткового добутку D1 , потім здійснюється операція зсуву на один розряд вліво і знаходиться частковий добуток D2. При наявності більшої кількості часткових добутків знаходяться часткові суми, після чого виконуються операції знаходження часткового добутку та їх зсуву.

Розглянемо ще два приклади. У першому з них операція знаходження суми виконується з переносом, починаючи з другого розряду. У другому демонструється той факт, що множення на нуль не виконується, а приписуються всі нулі справа після виконання операції.

×               ×      
                       
                           
                           
                 
                           

У будь-якому випадку, операція множення складається з операцій зсуву і додавання. Тому в цифровій схемотехніці і мікропроцесорних пристроях вона може виконуватись як на програмному рівні, так і на апаратному.

При виконанні операцій множення і ділення існують спеціальні алгоритми для безпосереднього виконання цих операцій з використанням доповнюючи кодів, які описані у відповідній літературі з мікропроцесорної та комп’ютерної техніки.

Найпростіший алгоритм виконання операції двійкового ділення базується на методі зсуву і віднімання. Нижче приводиться приклад використання цього методу для беззнакових десяткових і двійкових чисел.

 
   
     
       
   
         
         
             

В обох випадках виконання операції множення ми порівнюємо зменшуване ділене з множеним дільником для визначення, який множник зміщеного дільника відняти. У десятковій системі спочатку вибираємо 11 як найбільший множник, менший 21. Потім вибираємо 99 як найбільший множник, менший 107. При використанні бінарних чисел вибір дещо простіше, оскільки маємо тільки дві можливості для порівняння – нуль і сам дільник.

Методи ділення для двійкових чисел у деякій мірі комплементарні до методу двійкового множення. Типовий алгоритм ділення приймає (n + m) біт діленого та n біт дільника і створює m біт результату та n біт залишку. Операція ділення є переповнюючою, якщо дільник дорівнює нулю або результат може мати вираз більший, ніж m біт. У більшості цифрових пристроїв апаратно організовано, що n = m.

Виконання операцій ділення чисел зі знаком може бути виконано тим же шляхом. Результату приписується додатній знак, якщо знаки чисел, що беруть участь у виконанні операції, однакові, і від’ємний, якщо знаки чисел різні. Залишкові приписується той же знак, що і діленому.