Полтавський Військовий Інститут Зв’язку
Кафедра схемотехніки радіоелектронних систем
ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА МІКРОПРОЦЕСОРИ
напрям підготовки 0924 «Телекомунікації»
Арифметичні основи обчислювальної техніки.
Полтава – 2006
Навчальна література.
Калабеков Б.А., Мамзелев И.А.Цифровые устройства и микропроцессорные системы.М.: Радио и связь, 1987, с.158-166
Цифровая и вычислительная техника /Под ред.Э.В.Евреинова/.М.: Радио и связь, 1991, с.39-58.
Лихтциндер Б.Я., Кузнецов В.Н. Микропроцессоры и вычислительные устройства в радиотехнике. К.: Вища школа, 1988, с.11-25.
1. ФОРМИ ПОДАННЯ ДВІЙКОВИХ ЧИСЕЛ В ЕОМ
Двійкові числа в обчислювальних пристроях розміщуються у комірках пам'яті, причому для кожного розряду числа виділяється окрема комірка, що зберігає один біт інформації. Сукупність комірок, призначених для розміщення одного двійкового числа, називають розрядною сіткою. Довжина розрядної сітки (число комірок n у розрядній сітці) обмежена і залежить від конструктивних особливостей обчислювального пристрою. Більшість існуючих електронних обчислювальних пристроїв мають розрядні сітки, що містять 16, 32 або 64 комірок.
Розміщення розрядів числа у розрядній сітці може відбуватися різними способами. Спосіб розміщення визначається формою подання двійкових чисел у ЕОМ. Розрізняють дві форми подання двійкових чисел: із фіксованою комою і з «плавучою» комою. Іноді ці форми називають відповідно природною і напівлогарифмічною.
Припустимо, що в розрядній сітці необхідно розмістити двійкове число, що містить цілу і дробову частини. Якщо для розміщення цілої частини числа виділяється k комірок n-розрядної сітки, то (якщо не враховувати знак) для розміщення дробової частини залишиться n-k вільних комірок (рис. 1).
n |
||||||||||||
Знак | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | ||
k | n-k |
Рис. 1. Форма подання двійкових чисел із фіксованою комою.
Така форма подання двійкових чисел називається формою з фіксованою комою. Дійсно, положення коми строго фіксовано стосовно розрядної сітки. Якщо кількість розрядів у дробовій частині числа перевищують n-k, то деякі молодші розряди виходять за межі розрядної сітки і не будуть сприйматися обчислювальним пристроєм. Отже, будь-яке двійкове число, менше ніж одиниця молодшого розряду розрядної сітки, сприймається як нуль і називається машинним нулем.
У результаті відкидання молодших розрядів дробової частини числа, розташованої за межами розрядної сітки, виникає похибка подання. Максимальне значення абсолютної похибки подання не перевищує одиниці молодшого розряду сітки.
В універсальних ЕОМ форма з фіксованою комою, у зв'язку з властивою їй низькою точністю, застосовується лише для подання цілих чисел. Основною є форма подання чисел з «плавучою» комою. Її використання дозволяє суттєво розширити діапазон і зменшити відносну похибку.
У цій формі числа подаються у вигляді суми деякого ступеня основи системи числення (який називається характеристикою числа) і цифрової частини, що має вигляд правильного дробу:
,
де p звуть порядком числа, а правильний дріб a – його мантисою. Мантиса і порядок є знаковими числами. Тому для позначення знаків у розрядній сітці відводяться два додаткові розряди. Знак усього числа співпадає із знаком мантиси.
При запису двійкового числа у показовій формі, в розрядній сітці використовуються дві групи розрядів (без урахування знакових розрядів мантиси і порядку). Перша група (k розрядів) призначена для розміщення коду мантиси, друга (n-k розрядів) – для розміщення коду порядку (рис.2).
n |
||||||||||||||
Знак мантиси | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | Знак порядку | |||
k | n-k |
Рис. 2. Форма подання двійкових чисел із „плавучою” комою.
Отже, мантиса числа може мати необмежену кількість різних значень, менших за одиницю, при відповідних значеннях порядку (тобто кома може «плавати»). З усієї кількості подань числа у показовій формі те його подання, що не має в старшому розряді мантиси нуля, називають нормалізованим. Всі інші подання є ненормалізованими. У нормалізованій формі значення мантиси завжди більші або дорівнюють 1/2, але не перевищують одиниці.
У обчислювальних пристроях із «плавучою» комою усі числа зберігаються у нормалізованому вигляді, при цьому не втрачаються молодші розряди мантиси і підвищується точність обчислень. Якщо після виконання будь-якої арифметичної операції результат виявляється ненормалізованим, то перед занесенням числа в пам’ять виконують його нормалізацію, тобто зсув мантиси ліворуч на відповідну кількість розрядів, і зменшення порядку числа на відповідну кількість одиниць.
Показова форма подання чисел має і свої вади, основною з яких є порівняно висока складність виконання арифметичних операцій, а отже, і більша вимогливість до ресурсів обчислювального пристрою. Це обмежує її застосування, наприклад, у спеціалізованих радіотехнічних обчислювальних пристроях, у системах управління технологічними процесами та обробки вимірювальної інформації у реальному часі.
2. ПРЯМИЙ, ОБЕРНЕНИЙ І ДОДАТКОВИЙ КОДИ ДВІЙКОВИХ ЧИСЕЛ
Залежно від способу обробки бітів, розміщених у розрядній сітці, розрізняють два види кодів: паралельний, коли в кожний момент часу всі розряди сітки доступні для обробки, і послідовний, коли в кожний момент часу доступний один розряд сітки. Числа, подані паралельним кодом, доступні за один такт, а числа, подані послідовним кодом, – за n тактів, де n – розрядність сітки. Якщо розрядність числа перевищує довжину сітки, то його обробка ведеться частинами.
Натуральним кодом називають подання числа як цілого беззнакового у двійковій системі числення. Діапазон подання чисел у натуральному коді для n- розрядної сітки становить від 0 до 2n-1, тобто для 8-розрядної сітки – від 0 до 255.
Для подання цілих знакових чисел використовують прямий, обернений і додатковий коди. Старший розряд сітки є знаковим. Значення цього розряду дорівнює 0 для додатних чисел і 1 – для від’ємних. В інших розрядах розміщується модуль числа.
Якщо до натурального коду цілого числа додати знаковий розряд, одержуємо запис числа у прямому коді (ПК). Домовимося знаковий розряд розташовувати зліва і відокремлювати від розрядів модуля числа крапкою, наприклад: + 6(10) = 0. 110(ПК); - 6(10) = 1. 110(ПК).
Використання ПК забезпечує виконання операції додавання двох додатніх чисел звичайним способом без будь-яких складностей – не варто лише робити перенос одиниці старшого розряду модуля суми у знаковий розряд. Тобто при виконанні арифметичних операцій над ПК двійкових чисел знаковий розряд і розряди модуля не можна розглядати як єдине ціле. У цьому можна переконатися, розглянувши такий приклад:
Правильно: |
Неправильно: |
0. 0110 + 0. 1010 0.10000 |
0.0110 + 0.1010 1.0000 |
(+6) + (10) = (+16) | (+6) + (+10) = (- 0) |
Однак, виконання операції віднімання одного числа від іншого шляхом безпосереднього додавання їхніх ПК неможливо. Неважко також помітити, що в ПК нуль має два можливі зображення: - 0 = 1.000... і + 0 = 0.000..., що ускладнює інтерпретацію результатів виконання арифметичних операцій у ЕОМ.
Іншою формою запису двійкових чисел є обернений код (ОК).
ОК двійкового від’ємного числа утворюється з ПК рівного йому за модулем додатнього числа шляхом інвертування значень усіх його розрядів. Або: ОК від’ємного числа утворюється шляхом інверсії всіх розрядів модуля цього числа, записаного у ПК. Знаковий розряд при цьому зберігає значення 1. Наприклад, 6(10) = 1.110(ПК) =1.001(ОК).
При виконанні арифметичних операцій над двійковими числами, поданими в ОК, знаковий розряд і розряд модуля числа можна розглядати як єдине ціле (перенос одиниці зі старшого розряду модуля суми в знаковий розряд не приводить до помилкового результату), але нуль як і раніше має два зображення – «додатнє» і «від’ємне». Слід зазначити, що отриманий при додаванні від’ємний результат також утворюється в ОК. У цьому випадку число може бути перетворене у ПК інверсією всіх значущих розрядів (розрядів модуля). Наприклад:
0.110 |
+1.001 |
1.111(ОК) = 1.000(ПК) |
(+6) + (-6) = (-0)
Найбільше поширення в обчислювальних пристроях одержало подання від’ємних двійкових чисел за допомогою додаткового коду (ДК).
ДК від’ємного числа утворюється з його прямого коду за правилом:
у знаковому розряді залишається одиниця;
розряди модуля числа інвертуються;
до молодшого розряду додається одиниця.
Очевидно, що ДК від’ємного числа утворюється з його ОК додаванням одиниці до молодшого розряду.
Наприклад, - 6(10) = 1.010(ДК).
Дійсно, для числа - 6 маємо:
1.110(ПК) |
1.001(ОК) |
+ 1 |
1.010(ДК). |
Зворотний перехід від ДК до ПК або ОК відбувається за тими ж правилами.
Головною перевагою ДК є те, що цифра 0 у ньому має єдине подання: 0.000... Саме тому, для подання від’ємних чисел у сучасних ПЕОМ використовується переважно ДК.
Неправильний дріб (число, що має цілу частину) із знаком записують у різних кодах за допомогою традиційного роздільника – коми між цілою і дробовою частиною. Наприклад: - 118,375(10) = 1.0001,101(ДК).
Слід пам'ятати, що для кодування додатніх чисел застосовується тільки ПК, хоча можна сказати, що для таких чисел ДК і ОК збігаються з прямим.
Операція одержання ДК від’ємного числа з ПК рівного йому за модулем додатнього числа називається операцією доповнення. Ця операція полягає в інвертуванні всіх розрядів вихідного коду (включаючи знаковий) і додавання до молодшого розряду одиниці.
Таким чином, сформулюємо наступне правило: у системі двійкових чисел із знаком заміна додатнього числа на рівне йому за модулем від’ємне і навпаки, від’ємного на додатнє, здійснюється шляхом застосуванням до коду даного числа операції доповнення.
Ця властивість подання від’ємних чисел у ДК дозволяє при виконанні арифметичних операцій взагалі відмовитися від операції віднімання, замінивши її операцією додавання з числом, що має знак, протилежний знаку числа, яке віднімається.
3. АЛГОРИТМИ ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ НАД ДВІЙКОВИМИ ЧИСЛАМИ ІЗ ЗНАКОМ
Додавання двійкових чисел із знаком
Очевидно, що при додаванні чисел із знаком можуть виникати переноси одиниці із старшого розряду модуля суми до знакового розряду (домовимося позначати його Р1) та із знакового розряду – ліворуч за межі розрядної сітки, у розряд переповнення (Р2). Через використання розглянутих раніше кодів, у яких знак числа позначається тими ж цифрами, що і розряди модуля, переповнення розрядної сітки може виникати навіть у випадку додавання чисел із різними знаками, коли модуль результату не перевищує модуля будь-якого операнда. При додаванні ж двох від’ємних чисел перенесення одиниці до розряду переповнення відбувається завжди.
При виникненні переповнення розрядної сітки для одержання правильного результату додавання необхідно застосовувати таке правило:
якщо Р1 Е Р2 = 0, одиниця в розряді переповнення ігнорується (відкидається);
якщо Р1 Е Р2 = 1, необхідно зсунути число на один розряд праворуч (або зсунути позицію точки на один розряд ліворуч).
Додавання дробових і цілих двійкових чисел, поданих у формі з фіксованою комою, відбувається однаково, тобто порядок додавання не залежить від розташування коми. Тому операцію додавання розглянемо на прикладі додавання цілих чисел.
Приклади:
Додавання двох додатніх чисел (без переповнення розрядної сітки).
0.100111 | 39 |
+ 0.001101 |
+13 |
0.110100 | 52 |
Р1Е Р2 = 0 – результат коректний і остаточний.
Додавання двох додатніх чисел (з переповненням розрядної сітки).
0.01101 | 13 |
+ 0.10011 |
+19 |
1.00000 | 32 |
Р1 Е Р2 = 1. Результат некоректний, тому що відбулося переповнення розрядної сітки. Зсуваючи число на один розряд праворуч, остаточно маємо 0.100000(ПК) = 32(10).
Додавання двох чисел із різними знаками (без переповнення розрядної сітки)
1.001100 | - 52 |
+ 0.001101 |
+ 13 |
1.011001 | - 39 |
Р1 Е Р2 = 0. Результат коректний, але тому що він є від’ємним, для перевірки правильності розв’язання необхідно перетворити його у прямий код. Остаточно маємо 1.100111(ПК) = 39(10).
Додавання двох чисел, рівних за модулем і різних за знаком.
1.011001 | - 39 |
+ 0.100111 |
+ 39 |
10.000000 | 0 |
Р1Е Р2 = 0. Результат коректний, якщо не брати до уваги одиницю у розряді переповнення.
Додавання двох від’ємних чисел виконується аналогічно прикладам 1, 2 (у залежності від значення виразу Р1 Е Р2. Тому що результат у цьому випадку завжди від’ємний, для перевірки правильності розв’язання необхідно перетворити його у прямий код, аналогічно прикладу 3.
Висновки:
Правильність виконання операцій додавання обов'язково повинна перевірятися шляхом аналізу значення виразу Р1Е Р2, щоб уникнути одержання некоректного результату, що виникає при переповненні розрядної сітки, при цьому: якщо Р1 Е Р2 = 0, одиниця в розряді переповнення ігнорується (відкидається); якщо Р1Е Р2 = 1, необхідно зсунути число на один розряд праворуч.
Правило перевірки коректності результату додавання двійкових чисел також можна сформулювати в такий спосіб: якщо знак операндів однаковий, а знак суми протилежний, результат є некоректним. При додаванні двох операндів із різними знаками результат завжди коректний, якщо не брати до уваги одиницю у розряді переповнення.
Множення і ділення двійкових чисел із фіксованою комою
Множення двійкових чисел завжди виконують у прямому коді. Знак добутку визначають по знакових розрядах множників згідно з таким загальновідомим правилом: якщо знаки операндів однакові, то знак добутку – позитивний; у протилежному випадку – знак добутку негативний.
Знак добутку двох чисел не впливає на алгоритм виконання операції множення модулів цих чисел.
Часто використовують спосіб множення, процедура якого аналогічна процедурам множення вручну. У цьому випадку результат одержують додаванням часткових добутків. Кожний частковий добуток удвічі перевищує попередній, що відповідає його зсуванню ліворуч на один розряд. Наприклад:
1101 х 1011 1101 1101 + 0000 1101 10001111 |
13 х 11 13 + 13 143 |
Характерно, що розрядність добутку двійкових чисел удвічі перевищує розрядність співмножників. Якщо у множенні беруть участь мантиси, тобто правильні дроби, то молодші розряди, що виходять за межі розрядної сітки, можуть бути відкинуті без округлення або з округленням.
Операція ділення також виконується способом, аналогічним застосовуваному при діленні вручну, що наочно ілюструє приклад ділення двох чисел 506 : 23 = 22, тобто 0.111111010 : 0.10111 = 0.10110. Знак частки визначають аналогічно знаку добутку. Застосоване при діленні віднімання дільника виконують шляхом додавання його додаткового коду.
0. | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | ділене додатнє | ||||
1. | 0 | 1 | 0 | 0 | 1 | перше віднімання дільника | ||||||||
1 | 1 |
0 |
0. | 1 | 0 | 0 | 0 | 1 | 1 – результат додатній | |||||
1. | 0 | 1 | 0 | 0 | 1 | – друге віднімання дільника | ||||||||
0 |
1 |
1. | 1 | 0 | 1 | 0 | 0 | 0 – від’ємний результат | ||||||
0. | 1 | 0 | 1 | 1 | 1 | – додавання дільника | ||||||||
1 | 1 |
0 |
0. | 1 | 0 | 1 | 1 | 1 | 1 – результат додатній | |||||
1. | 0 | 1 | 0 | 0 | 1 | – третє віднімання дільника | ||||||||
1 | 1 |
0 |
0. | 0 | 0 | 0 | 0 | 1 – остача дорівнює нулю | ||||||
0 |
У даному прикладі використаний так названий алгоритм без відновлення остачі, що передбачає таку послідовність дій:
із діленого віднімається дільник (додається дільник, записаний у додатковому коді);
якщо остача додатня, перша цифра частки дорівнює одиниці, у протилежному випадку – 0;
остача зсувається ліворуч, і до неї додається дільник із знаком, зворотним знаку остачі;
знак наступної остачі визначає наступну цифру частки;
ці дії повторюють доти, поки не утвориться необхідне число розрядів частки або нульова остача.
Слід зазначити, що оскільки даний алгоритм передбачає додавання чисел (остач і дільника) тільки з протилежними знаками, то всі розряди проміжних сум, старші за знаковий, слід ігнорувати.
Виконання арифметичних операцій у пристроях із «плавучою» комою
Операція додавання у пристроях із «плавучою» комою відбувається у чотири етапи:
Порівнюються порядки доданків: менший порядок збільшується до більшого. При цьому відповідним чином корегується мантиса числа, яке перетворюється.
Виконується перетворення мантис у додаткові коди.
Виконується додавання мантис за правилами, розглянутими вище для чисел із фіксованої комою.
До суми приписується порядок доданків і, в разі необхідності, виконується нормалізація результату.
Операція множення чисел, поданих у формі з «плавучою» комою також виконується у чотири етапи:
Визначається знак добутку.
Перемножуються мантиси співмножників за правилами для чисел із фіксованої комою.
Обчислюється порядок добутку алгебраїчним додаванням порядків співмножників за правилами додавання цілих чисел із знаком.
Виконується нормалізація отриманого результату у випадку її необхідності.
Ділення чисел у пристроях із «плавучою» комою виконується так само, як і множення.
Висновок:
Операція віднімання в обчислювальних пристроях завжди заміняється операцією додавання з числом зворотного знаку (доповненням модулю від'ємника).
Операції множення і ділення в обчислювальних пристроях подаються у послідовності операцій додавання і зсування.
Таким чином, виконання всіх арифметичних операцій в обчислювальних пристроях зводиться до виконання типових послідовностей елементарних операцій – основної операції додавання і додаткових операцій інвертування кодів і зсування. Ці операції виконуються в спеціальному функціональному вузлі, що має назву арифметичного пристрою.