Попередня сторінка Зміст Наступна сторінка Електронні посібники ВНТУ
6 ДВІЙКОВО-ДЕСЯТКОВА АРИФМЕТИКА
6.1. Додавання в прямих Д-кода
В двійковому поданні десяткового числа, що кодувалося кожна десяткова цифра зображається тетрадою двійкових символів, де, ‒ десяткова цифра 1-го розряду; ‒ двійкова цифра 1-ї тетради. Отриманий таким чином десятковий код, що кодувався двійковими символами, для більш короткої назви вживають Д-кодом.
Є деяка множина Д-кодів. Вона зумовлюється наявністю всього 10 дозволених з 16 можливих комбінацій, що припускає тетрада. Наявність заборонених комбінацій в Д-кодах відрізняє їх від звичайних позиційных систем счислення, в яких всі комбінації ‒ дозволені. З всієї безлічі відомих Д-кодів найбільше розповсюдження в обчислювальній техніку отримали код Д1 прямого заміщення (система 8421) і код Д2 з надлишком 3 (система 8421+3).
Із-за заборонених комбінацій, при додаванні чисел в будь-якому з Д-кодів виникають необхідність в корекції результату і труднощі в формуванні десяткового переносу в наступну тетраду. Особливості додавання чисел в кожному з Д-кодів різноманітні, тому розглянемо їх окремо. При цьому будемо вважати, що задані числа A=anan-1…a1a0 і B=bnbn-1…b1b0, де ai, bi ‒ двійково-кодовані десяткові цифри (тетради). Необхідно отримати:
А + В = С = cn+1cn…c1c0, Причому
Ci=ai+bi+Пi-1-Пip; cn+1=Пn
де Пi = {0, 1}, Пi-1 = {0, 1} ‒ десяткові переноси; р = 10 ‒ підстава системи счислення.
Бо найбільше десяткове однорозрядне число рівно 9, то з урахуванням переносу в даний розряд, значення результату розрядного складання лежить в межах від 0 до 19. При цьому одиниця в другому розряді являє собою десятковий перенос в наступну тетраду, а сума одержується в двійковому коді, відмінному від необхідного двійково-десяткового представлення,тобто Вона вимагає корекції.
Код Д1
При додаванні чисел в коді Д1 можуть виникнути наступні випадки:
1 Якщо аi + bi + Пn-i < 10, то при виконанні дій над розрядами тетради по правилам двійкової арифметики відразу одержується правильний результат.
1 Якщо аi + bi + Пn-i ³ 10, то виникає десятковий перенос. Тому сума в даній тетраді повинна бути рівна:
ai+bi+Пi-1-Пi•10,
де Пi = 1.
При цьому признаком невірного результату є в одному випадку виникнення потетрадного переносу Пi’ = 16, В другому-поява забороненої комбінації, якщо 15 ³ аi + bi + +Пi-i ³ 10. В будь-якому з цих випадків необхідно скоректувати результат в даній тетраді введенням поправки + 0110, що призведе до виникненню потетрадного переносу і в другому випадку. Корекція зумовлена тим, що кожний перенос виносить з собою з даної тетради 16 одиниць, а приносить в наступну тільки 10 одиниць.
Приклад. Скласти тетради аi = 1000 і bi = 1001 при Пi-1 = 1.
ci’ = аi + bi + Пi-i = 10 010.
Так як Пi== 1, вимагається корекція результату
ci= 0010 + 0110 = 1000; Пi=Пi'=1.
Приклад. Скласти аi = 1000 і bi = 0110 при Пi-1 = 1.
ci’ = аi + bi + Пi-i = 1111.
Так як величина сi’ = 1111 належить до заборонених комбінацій, те необхідно ввести поправку виду 0110:
сi= 1111+0110= 10101, т. е. Пi= 1, сi=0101.
Таким чином, якщо в i-й тетраді сума цифр з переносом з (i-1)-й тетради менш 10, то додавання робиться без поправок; якщо ж сума цифр з переносом рівна або більше 10, те відбувається корекція результату тетради введенням поправки +0110, а при цьому перенос, що виникає додається до вмісту (i+1)-й тетради.
При цьому, якщо в декількох тетрадах, починаючи з (i+1)-й, розрядна сума рівна 1001, то перенос призведе до формування забороненої комбінації в (i+1)-й тетраді. В результаті цього зажадається корекція, що призведе до забороненої комбінації в (i+2)-й тетраді і т. п. Отже, із-за послідовного розповсюдження потетрадних переносів час додавання в коді Д1 складе в гіршому випадку n тактів, де n ‒ кількість тетрад. Звичайно схеми будують таким чином, щоб перенос, що виникає при доданні тетрадної поправки, минав скрізь тетради, в яких попередня сума рівна 910=10012 і скидав їх в 0. При цьому сума завжди формується за два такту.
Приклад. Скласти числа
А = 24810 = 0010 0100 1000 і В = 34910 = 0011 0100 1001
0010 0100 1000
0011 0100 1001
0101 1001¬ 0001
0110
0101 1001 0111: 59710=24810+34810
Стрілкою показані одиниці потетрадних переносів.
Код Д2
При додаванні чисел в коді Д2 можливі наступні випадки c врахуванням того, що аi’ = аi+3; bi’ = bi + 3, де аi’ и bi’‒ тетради для коду Д2.
Якщо аi’+ bi+Пi-1-1£15, то Ci=( аi+ bi+Пi-1+3)+3 = Сi + +6 = Ci’ + 3,
тобто результат необхідно скоректувати на величину (-0011). Якщо ж аi+ bi+Пi-1 - 1>15, то Ci=( аi+ bi+Пi-1+6) +10 - 16 = Ci’ - 3. Тут виникає десятковий перенос, що при переході в старшу тетраду міняє свою вагу з 16 на 10. Тому в цьому випадку вимагається поправка результату на величину +0011.
Суматори не роблять операцію виднімання, тому поправка (˗ З10) = (˗ 0011)2 здійснюється доданням в дану тетраду числа (13)10 = (1101)2 і блокуванням при цьому переносу, що виникає з даної тетради в старшу, яка має значення (16)10 ˗ (10000)2:
(˗3 = +13 ˗ 16)10 или (˗0011 = +1101˗10000)2.
Приклад. Задані в коді Д2
А = 46 = 0111 1001; В == 37 = 0110 1010.
Знайдемо суму
0111 1001
0110 1010
1110 0011
1101 0011
1 1011 0110 = 83
не реалізується
При додаванні в коді Д2 не виникає проблеми наскрізного переносу, і операція додавання виконується за два такти. Це пояснюється тим, що якщо в декількох тетрадах сума до додання поправки рівна 910 = 11112, то при надходженні переносу з (i ‒ 1)-й тетради в 1-ю, її вміст скинеться в 0 і перенос піде в (i+1)-у тетраду в цьому ж такті складання. В 1-у ж тетраду в другому такті складання буде додана поправка +0011. Тому корекція результату здійснюється потетрадно з блокуванням кіл потетрадних переносів. Таким чином, в коді Д2 завжди робиться корекція проміжного результату, отриманого шляхом додавання цифр доданків по правилам двійкової арифметики. При цьому, якщо при додаванні i-x тетрад не виникає переносу, тобто Пi = 0, то поправка рівна -0011. Якщо ж виникає потетрадний перенос Пi = 1, то поправка в 1-й тетраді дорівнює +0011.