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

Доповняльний код числа N=-0,a1a2..an - таке машинне уявлення, в якому число записується оберненим кодом із збільшенням в молодшому розряді на +1.

Правило перекладу з прямого коду в додатній код наступне:

- якщо в знаковому розряді знаходиться (q-1) - тобто число негативне, то всі цифри числа, окрім розрядів знаків, замінюються вирахуваннями з (q-1) значення розряду, а потім до цифри останнього молодшого розряду додається одиниця;

-якщо в знаковому розряді знаходиться 0 (або 00) - тобто число позитивне, то перетворення цифр не відбувається.

 

Приклади:

а) -243476(10); 9243476(10)пр = 9756523об + 0000001 = 9756524(10)доп

б) -0111000111(2); 1111000111(2)пр.; 11000111000(2)об + 0000000001(2)= 11000111001(2)доп

Перевірка:

11000111001доп

+1111000111пр

10.0000000000 (2(10))

в) –0,101110 ; 1101110пр ; 110001об + 000001 = 110010доп.

г) +425736(10) ; 0425736(10)пр = 0425736(10)доп= 0425736(10)об

Таким чином, для позитивних чисел прямий, оберненій і доповняльний коди співпадають, для негативного числа вони різні. Для позитивного числа в розряді знаку завжди встановлюють 0 або 00, а для негативного 1 або 11 (для довільної основи q знак «-» має код (q - 1)).

Узагальнемо і отримуємо вираз перекладу чисел у доповняльний код:

Приклади:

а) +0,275936(10); 0,275936(10) пр= 0,275936(10)доп (бо позитивне).

б) -0,275936(10); 10,000000(10)+(–0,275936(10)) = 9,724064доп

Звідси Nдоп=q+(-N), тобто додатній код є математичним доповненням числа до основи системи числення.

Покажемо, що доповняльний код – це доповнення до q, тобто: . Звідси, враховуючи це, будемо віднімати.

Приклад:

A = –0,1011; тоді Aдоп = _ 10,0000

0,1011

1,0101 Отримано доповняльний код.

Покажемо, що обернений код – це доповнення до qq- n, тобто:

, якщо A негативне, то Aоб=qq-n-|A|. Звідси, треба віднімати з q негативне число і молодшу 1 (тобто q-n).

Для довільної основи q це означає, що обернений код числа Аоб порозрядно формується від`ємом значення Апр в і-му розряді від (q-1).

Максимальне додатне число, що представляється при цьому дорівнює (1–2-n), або Nmax = - 0,111...11 тоді додатній код буде Nдод =10... 01. Якщо в наймолодший розряд числа Nmax додати 1 то отримаємо: -1,000...00. Перетворивши це число в додатній код, отримаємо,тобто: –1 £ Nдод £ (1-2-n).

 

7.4 Складання чисел, представлених у формі з фіксованою комою, на двійковому суматорі прямого коду

Двійковим суматором прямого коду (ДСПК) є суматор, в якому відсутній ланцюг порозрядного перенесення між старшим цифровим і знаковим розрядами (рис. 7.3).

Рисунок 7.3 - Двійковий суматор прямого коду (ДСПК)

На ДСПК можна складати тільки числа, що мають однакові знаки, а результат складання < 1 (для правильних дробів) або менше виразу 2n-1 (для цілого числа). Аналіз показує, що такий суматор виконує не всі операції складання, а лише дві з чотирьох: А+В і -(А+В). Сигнал пере-повнення Пn старшого n-розряду служить лише для індикації факту, що воно було, покладаючи подальші турботи на користувача або ЦА, а знак суми C визначається за знаком будь-якого операнда, наприклад SgA (SgB).

Нехай задані операнди:

де SgA і SgB – вміст знакових розрядів. Якщо SgA=SgB , то сума чисел матиме знак будь-якого з доданків, а цифрова її частина вийде порозрядним складанням операндів.

Приклади.

а) Скласти А = 01011 (+11); В = 0,0100 (+4). Тут SgA=0; SgB=0

+1011 (+11)

0100 (+4) С = 01111

01111 (+15)

б) Скласти A =-0101 (-5); B =-01001 (-9). Тут SgA=1; SgB=1

+0101 (-5)

1001 (-9) C = 11110

11110 (-14)

При складанні чисел на ДСПК можливі випадки, коли абсолютне значення суми операндів перевищує одиницю, тобто має місце переповнення розрядної сітки ЦА. Ознакою переповнення (g=1) буде наявність одиниці перенесення Пn із старшого розряду цифрової частини суматора. За цим сигналом повинні відбуватися автоматичний «останов» процесу рахування і коректування масштабних коефіцієнтів операндів А і В з розрахунком, щоб уникнути переповнення (наприклад зміна Кф).

8 АЛГЕБРАЇЧНЕ СКЛАДАННЯ БІНАРНИХ ЧИСЕЛ

 

8.1 Складання чисел на двійковому суматорі доповняльного коду

Двійковим суматором доповняльного коду (ДСДК) називається суматор, що оперує числами, що представлені в доповняльному коді.

Основною особливістю ДСДК є наявність ланцюга перенесення одиниці переповнення Пn зі старшого розряду цифрової частини в знаковий розряд (рис. 8.1) і відсутність зворотнього зв’язку перенесення одиниці переповненняПSg із знакового розряду в наймолодший розряд числа.

Рисунок 8.1 -Двійковий суматор доповняльного коду (ДСДК)

Для визначення правил складання чисел в ДСДК розглянемо наступну теорему: якщо результат суми доповняльних кодів чисел негативний, то він представлений у доповняльному коді.

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

Випадок 1. A>0, B>0, а A+B<1 числа позитивні і немає переповнення. Для цього випадку Aдоп =А, Вдоп=В, то Адоп+Вдоп=А+В=[A+B]доп - результат позитивний. Покажемо це на прикладі: А = +0,1010; В = +0,0100.

С=+0,1110.

Випадок 2. A<0, B>0, а |A|>B. Для цього випадку Адоп=q+|-A |, Вдоп=В; тоді Адоп+Вдоп=q+|A|+B=[A+B]доп – результат негативний.

А=-0,1011; В=+0,0100

С= - 0,0111.

Отриманий результат негативний, це означає, що він представлений у доповняльному коді, і його необхідно перевести в прямий, щоб отримати дійсний результат. Переклад числа з доповняльного коду в прямий здійснюємо за наступним алгоритмом: усі розряди числа (окрім знакових) інвертуються (тобто береться обернений код результату) і в молодший розряд додається 1. Знак суми С зберігається.

Випадок 3. A<0, B>0, а |A|<B. для цього випадку Адоп=q+|A|, Вдоп=В; тоді Адоп+Вдоп=q+|A|+B. Оскільки значення цієї суми більше q, то з’являється одиниця перенесення в знаковий розряд, що дорівнює вилученню з суми q одиниці, тобто результат:Адоп+Вдоп=А+В=Спр.

Приклад. А =-0,0100; В =+0,1011.

С= + 0,0111.

Випадок 4. A<0, B<0, а |A+B|<1. Для цього випадку Адоп=q+(-А); Вдоп= q+(-В), тоді Адоп+Вдоп=q+(-A)+q+(-B)=[A+B]доп - результат негативний і з’явиться одиниця перенесення із знакового розряду.

Приклад. А = -0,0100; В = -0,1011.

Спр=1,1111. С= -0,1111

Висновок. Теорема справедлива для всіх випадків, в яких не виникає переповнення розрядної сітки, що дозволяє складати в ДСДК машинні зображення чисел за правилами двійкової арифметики. Приклади:

Випадок 1. A>0, B>0, C<1.

а) A(10) = +0,372914(10)пр; В(10) = +0,564019пр

 

 

б) Для цілих чисел: Апр= 01001110101 (+629) Впр=0101110011(+371)

 

Перевірка: 629+371=1000

Випадок 2. A>0, B>0, C³1 (переповнення розрядової сітки):

П

 

 

оПоява в знаковому розряді одиниці позитивного переповнення говорить про переривання роботи для зміни KФ або зсув мантиси вправо на один розряд, а до порядку результату додається одиниця (тобто проводиться нормалізація результату).

Апр = 01101110101 Впр = 0101110011 Адоп = 01101110101 + Вдоп = 0101110011 Сдоп = 1011101000 (далі зсув вправо на один розряд) Спр = 010011101000.

 


Перевірка: +885 + 371 =1256

Відбулося переповнення (g=1), тобто в знаковому розряді SgС0 з’явилася ознака (1). Що це? ЦА не може розібрати ситуацію, це знак «мінус» суми С або ознака переповнення. Для вирішення цього треба в поле знаків додати ще один розряд (використовується модифікований доповняльний код, див. гл. 9).

Зсув вправо (вліво) числа зменшує (збільшує) його на порядок: тобто змінеться Кф (для ФФК) або порядок Р (для ФРК) і цю зміну треба відкорегувати, щоб значення числа не змінилось.

Випадок 3. A>0, B<0, |A|>|B|: тобто C =A+q+B оскільки C>q, то q повинне бути відібране, що робиться шляхом відкидання сигналу перенесення, що виникає в знаковому розряді.

 
 
A(10)пр=+0.732904; В(10)пр= -0.042703(зрівняно кількість розрядів А і В), В(10)доп=9,957297 [А]доп = 0,732904 + [В]доп = 9,957297 [С]доп =10,690201; Спр = +0,690201. При цьому в ДСДК переповнення 1 розряду SgC не використовується (відкидається).

 

 


При визначенні доповняльного коду В(10)доп, спочатку провели вирівнювання розрядності чисел, додавши 0 в старший розряд числа Впр, а потім віднімали з (q-1)=9 значення по кожному розряду і отримали обернений код, потім до його молодшого розряду додали 1.

 

Розглянемо ще приклад:

А(2)пр=01101110101 (+885); В(2)пр =1110110101 (-437).

 

 

Одиниця переповнення 1 відкидається (бо ДСДК), знак результату С позитивний і означає прямий код.

Випадок 4. A>0, B<0, |A|<|B|, C =A+q+B, оскільки C<0, то C=q+(A+B).

Випадок 5. A<0, B<0, |A|+|B|<1, C=q+A+q+B<0. При цьому, одна основа повинна бути відкинута за рахунок втрати сигналу перенесення в знаковому розряді. Тоді C=q+(A+B).

Випадок 6. A<0, B<0, але |A|+|B|>0.

Це також випадок переповнення розрядної сітки, але на відміну від випадку 2 переповнення тут негативне.

A(10)пр = -0,610892(10); В(10)пр = -0,843507(10)

Адоп = 9,389108

+ Вдоп = 9,156493

Сдоп =18,545601

Поява цифри 8 в знаковому розряді говорить про те, що відбулося переповнення SgС0, необхідний зсув вправо з відновленням знаку і перетворення результату в прямий код.

Сдоп=18,545601; після зсуву Сдоп=9,8545601 (проведено зсув на 1 розряд вправо і відновлення знаку), Спр=9,1454399.

Розглянемо приклад в двійковій системі числення.

Апр = -1101110100; Впр = -1110111010

Адоп = 1010001100

+ Вдоп = 1001000110

Сдоп =10011010010

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

Сдоп =10011010010=10011010010;

Спр=111100101110. Перевірка: -884-954= -1838.

У звичайному доповняльному коді є проблема із зображенням числа «-1». Тут розглядають два варіанти:

1. Виробляти сигнал переповнення, якщо в знаковому розряді (q-1), а в цифрових розрядах є нулі тобто Адоп= 1.0000…0.

2. Вважати -1 допустимим значенням, але при цьому її зображення в прямому коді співпадатиме із зображенням у доповняльному коді.

-1(10)доп = 9.00000…0 = 9.99999…9 + 0.0000…01 = 9.00000…0 = -1(10)пр

-1(2)доп = 1.00000…0 = 1.11111…1 + 0.0000…01 = -1(2)пр

Щоб відрізняти -1 від +1, використовують модифікований доповняльнийкод (див. розділ 9).

 

8.2 Складання чисел на суматорі оберненого коду

Двійковим суматором оберненого коду (ДСОК) є суматор, що оперує з числами в оберненому коді.

Структурна схема ДСОК приведена на рис. 8.2.

Рисунок 8.2 - Двійковий суматор оберненого коду (ДСОК)

Основною особливістю ДСОК є наявність ланцюга перенесення одиниці переповнення Пn із старшого розряду цифрової частини в знаковий розряд (рис. 8.2) і наявність зворотнього зв’язку перенесення одиниці пере-повненняПSg із старшого знакового розряду Sg1 в молодший розряд числа.

ДСОК має: n суматорів (по кількості розрядів мантиси); суматор знакових розрядів; ai, bi - цифрові розряди числа в машинному коді; перенесення із старших розрядів мантиси в знаковий розряд; нарешті, обернене перенесення із старшого знакового розряду в молодший розряд цифрової частини числа. Щоб сформувати правила складання чисел в обернених кодах на ДСОК розглянемо теорему.

Теорема: сума обернених кодів чисел є обернений код результату.

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

Розглянемо наступні випадки складання на суматорі ДСОК.

Випадок 1. А>0, В>0, А+В<1 (тобто обидва числа позитивні).

Тоді Аоб+Воб=[A +B]об =А+В, тобто складання проводиться в прямих кодах.

Приклад: А = 0101 (+5)

В = 0111 (+7)

С = 01100 (+12)

Випадок 2. A<0, B>0, |A|>B, Аоб=q-q-n+A, Воб=В, тоді Аоб+Воб=q-q-n+A+B=[A+B]об, тобто результат негативний і в оберненому коді, треба повертатися до Спр шляхом інверсії розрядів числа.

Приклад: А = -01011 (-11), В = 0111 (+7).

Аоб=1100

+Воб=0111

Соб=11011 Спр=1100 (-4)

Випадок 3. A<0, B>0, A<B, тут Аоб = q-q-n+A. Тоді Аоб+Воб=q-q-n+A+B. Оскільки сума (А +В) позитивна, то права частина цього виразу стає більше q, що викликає появу одиниці перенесення із знакового розряду в молодший розряд числа (величина перенесення при цьому, рівна q-q-n), тоді Аоб+Воб=А+В. Результат позитивний, це і є Спр.

Приклад: А = -0101 (-5); В = 0111 (+7).

Аоб = 11010

+Воб = 0111

Соб = 10001

+ a→→1

Спр=0010(+2). Оскільки В>|A|, то їх алгебраїчна різниця позитивна.

Випадок 4. А<0, В<О, |А + В|<1, тут Aоб=q-q-n+A, Воб=q-q-n+B. Тоді Аоб+Воб=q-q-n+A+q-q-n+B. Тут з’являється одиниця перенесення, що дорівнює вилученню з суми -q-n, тобто Аоб+Воб=q-q-n+A+B=[A+B]об

Приклад: А = -0,0101 ; В = -0,1000.

Аоб=1,1010

+Воб=1,0111

11,0001

+ a→→1

Соб=1,0010; Спр= 1,1101 (-0,8125).

9 МОДИФІКОВАНІ БІНАРНІ КОДИ

 

9.1 Переповнення розрядної сітки

Ми не раз спостерігали, як при складанні чисел з однаковими знаками, представлених у формі з фіксованою комою (ФФК), може виникнути переповнення розрядної сітки. При цьому, щоб уникнути спотворення резуль-тату, автомат повинен фіксувати переповнення і відповідно реагувати на це.

 

9.1.1 Переповнення при складанні прямих кодів

Ознакою переповнення розрядної сітки суматора прямого коду є поява одиниці перенесення із старшого розряду цифрової частини числа.

Приклади. Суматор ДСПК.

а) А=+1010, В=+1101.

Апр= 01010 (+10)

+Впр= 01101 (+13)

Спр= 0111 (+7≠ +23). Отримано спотворений (невірний) результат із-за втрати перенесення П зі старшого цифрового розряду.

б) А=-1100, В= -1010.

Апр= 11100

+Впр= 11010

Спр= 1110 (-6≠-22). Тут теж отриманий невірний результат із-за втрати одиниці перенесення.

 

9.1.2 Переповнення при складанні доповняльних кодів

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

Приклади:

а) А= +01011; В= +01010 (перевірку отриманого результату проведіть самостійно).

 

б) А= -01011; В= -01001 (перевірку отриманого результату проведіть самостійно).

 

 

9.1.3 Переповнення при складанні в обернених кодах

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

Приклад:

1) А=0111; В=01101.

 

 

Знак числа спотворений (невірний):

2) А= -0110; В= -01101.

 

 

Знак числа спотворений (невірний)

Для усунення втрат від неврахування перенесення одиниці та формування стану переповнення, у складі ЦА повинні бути перед-бачені додаткові засоби, що дозволяють фіксувати і аналізувати пере-повнення за їх ознаками з метою усунення спотворення результату.

Щоб фіксувати переповнення розрядної сітки в ДСПК, ДСДК, ДСОК, вводять допоміжний розряд в знакову частину зображення числа, який називають розрядом переповнення числа. Таке представлення числа називається модифікованим (див. рис. 9.1).

Рисунок 9.1 - Модифікований код числа для ФФК

Приклади:

а) [А]пр=001100111011, тоді, оскільки А>0 маємо: [а]М.доп=001100111011

б) Апр = -01100111011, оскільки А<0, то Ам.доп =100+(-Aпр)=q2-A

_100000000000

01100111011

11011000101

 

ПРАВИЛО: для переводу бінарного числа з прямого коду в модифіковний доповняльний код, аналізують знак числа. Якщо в знаковому розряді знаходиться мінус (одиниця), то в два знакових розряди записують одиниці, а всі цифри числа інвертують (одиниці заміняють нулями, а нулі - одиницями), потім до останньої молодшій цифрі (молодшого розряду) числа додають одиницю. Якщо в знаковому розряді стоїть нуль, то додають ще один, а число не змінюють. ПРАВИЛО: для переводу бінарного числа з прямого коду в модифіковний обернений код, аналізують знак числа. Якщо в знаковому розряді знаходиться мінус (одиниця), то в два знакових розряди записують одиниці, а всі цифри числа інвертують (одиниці заміняють нулями, а нулі - одиницями). Коли в знаковому розряді стоїть нуль, то додають ще один, а число не змінюють. При виконанні операцій алгебраїчного додавання або вирахування два знакових розряди приймають участь в операції, як рівноправні цифрові розряди. Після виконання операцій, стан знакових розрядів (знак результату) встановлює лівий знаковий розряд, а наявність чи відсутність переповнення - правий знаковий розряд. Знакові розряди можуть мати наступні комбінації станів при будь- яких значеннях операндів А і В: - 00 - результат числа позитивний, переповнення немає; - 01 - результат числа позитивний, було переповнення; - 11 - результат числа негативний, переповнення немає; - 10 - результат числа негативний , було переповнення.

 

У машинному представленні чисел, представлених в модифіко-ваному коді, використовується (n+2) розрядів: з них два знакових, кома опускається, встановлюється постійний коефіцієнт формату Кф. Сигнал переповнення g виробляється по наступній математичній моделі (тут знак Ù позначає логічну операцію множення «і», а риска над символом Sg – логічну операцію інверсії

γ = 1, якщо Sg1 Ù`Sg2= 1

` Sg1 Ù Sg2= 1,і γ = 0в інших випадках.

Приклади: а) А= 01011 (+11), В= 01010 (+10).

 

 

Тут ознакою переповнення є 1 в знаковому розряді. За цією ознакою проводиться зрушення числа вправо з одночасним збільшенням коефіцієнта формату Кф на 1 і відновленням Sg1 (по значенню Sg2)обох розрядів Sg1Sg2, тобто знаку 00 результату С числа, далі перевіряється нормалізація числа (наявність 1 після коми в числі).

б) А= -01011 (-11), В= -01001(-9). Перетворимо в машинну форму: Ампр=111011, Вмпр=111001. Оскільки обидва числа негативні і операція складання виконується на ДСДК, то в суматор числа поступають в доповняльному коді.

Аналіз розрядів знаку результату (10 - див. третю строку) показав, необхідність відновлення його (до 11), зрушуючи число вправо на один розряд, з одночасним збільшенням коефіцієнта формату Кф на 1. Результат негативний, і тому представлений у доповняльному коді. Тому результат перетвориться в істиний (прямий код) через інвертування (обернений код) і з додаванням +1 в молодший розряд.

9.2 Модифіковане складання чисел у форматі з рухомою крапкою (комою)

Числа, представлені у форматі з рухомою крапкою (комою) – ФРК, мають дві часті: мантису і порядок. Тому, операція додавання (складання) виконується окремо над мантисою і над порядком. Отже, в ЦА може бути два суматори: для мантиси і для порядку.

Для чисел з рухомою крапкою справедлива умова нормалізації:

q-1≤|mA| < 1, (9.1)

де q - основа системи числення; mA - мантиси числа.

Це нормалізоване представлення числа, яке вимагає, щоб в старшому розряді мантиси 2-го числа була одиниця. Для двійкової системи це означатиме, що мантиса завжди знаходиться в межах:

0,5≤|mA|<1, (9.2)

При виконанні автоматом операцій над числами, нормалізують як вхідні доданки А і В, так і вихідний результат С.

Операція нормалізації числа складається з умови нормалізації (9.1) і здійснюється методом зрушення мантиси числа в ту або іншу сторону.

Зрушення можуть проводитися вліво або управо в межах розрядної сітки ЦА за правилами представлених моделлю таблиці 9.1.

Таблиця 9.1 -Зсув звичайних кодів числа (один розряд знаку)

Початкове число Зсув вліво на один розряд (від порядку вираховується 1) Зсув вправо на один розряд (до порядку додається 1)
0/a1 a2... an 1/a1 a2... a n a1/a 2... a n 0 a1/a2... a ne 0/0 a1 a2... an 0/1 a1 a2... an

Величина e залежить від коду. Для доповняльного коду ε=0, для оберненого коду e=1. При складанні чисел результат може вийти з нормалізації як зліва, так і справа (див. табл. 9.1, 9.2).

Ознакою порушення нормалізації числа справа γ=1 (коли результат має переповнення) є наявність різнойменних комбінацій в знакових розрядах сумматора:

γ=1, якщо Sg1 Ù`Sg2= 1

`Sg1 Ù Sg2= 1, і γ=0 у решті випадків.

Таблиця 9.2 -Зсув модифікованих кодів числа (два розряди знаку)

Початкове число Зсув вліво на один розряд (від порядку вираховується 1) Зсув вправо на один розряд (до порядку додається 1)
00/α1,α2,...,αn 01/α1,α2,...,αn 10/α1,α2,...,αn 11/α1,α2,...,αn 1/α2,...,αn 0 1α1/α2,...,αn 0 0α1/α2,...,αn ε 1α1/α2,...,αnε 00/0,α1,α2,...,αn 00/1,α1,α2,...,αn 11/0,α1,α2,...,αn 11/1,α1,α2,...,αn

(де γ - ознака порушення нормалізації числа справа, вказує на необхідність зсуву числа вправо на один розряд для відновлення знаку числа).

Ознакою порушення нормалізації числа зліва δ=1 (коли результат по абсолютній величині виявляється менше 1/q ) є наявність однакових комбінацій в розряді переповнення і старшому розряді (R1) цифрової частини суматора:

δ=1, якщо Sg2 Ù R1 = 1

`Sg2 Ù`R1 = 1, іδ=0 у решті випадків,

(де δ – ознака порушення нормалізації, що вказує на необхідність зсуву числа вліво на один розряд). Зазвичай Sg1 (або Sg0)- старший, а Sg2 (або Sg1)- молодший знакові розряди.

Таким чином, операція нормалізації отриманого числа (суми двох операндів) складатиметься з сукупності перевірки наявності ознак порушення γ і δ та зсувів (вправо, вліво) числа.

Отже, розглянемо складання чисел А=mApA и В=mBpB, що мають однаковий порядок pA=pB. Обидві мантиси задовольняють умові нормалізації. Складання мантиси здійснюють на суматорі ДСДК або ДСОК за правилом складання чисел представлених у формі з фіксованою комою. Якщо після складання мантиса результату задовольняє умові нормалізації (тобто δ=0, γ=0), то до цього результату приписується порядок будь-якого з операндів. Інакше відбувається нормалізація числа.

Приклад 1. Знайти суму чисел: А=0,1000×2-3 та В=-0,1011×2-3.

Мантиси і порядок обробляються на ДСДК у ФРК.

[mА]д=00/,1000 [РА]д=11/101

+[mB]д=11/,0101 [Рв]д=11/101

[mс]д=11/,1101

Тут Sg2&R1=1, тобто δ=1, γ=0. Це означає, що необхідний зсув мантиси [mс]д вліво на 1 розряд.

[m’c]=11/,1010 Перевіряємо. Знову δ=1, γ=0 - необхідний ще зсув вліво на 1 розряд.

[m’’c]д= 11/,0100. Перевіряємо, все гаразд δ=0, γ=0.

Одночасно зі зрушенням потрібна корекція порядку на мінус 2(10)=11/010(2). (що рівнозначно збільшенню порядку на дві одиниці – у доповняльному коді 11/110).

+[Рс]д=11/101

Pc]д=11/110Рс]пр=11/010

[Р’’с]д=11/011 РС пр=-11/101 (тобто Р= 2-5)

тоді результат (число) дорівнює:

[m’’c]д= 11/,0100

[m’’c]об=11/,1011

+ 1

11/,1100.

Відповідь: mC пр=11/,1100. З урахуванням порядку запис для 16-ти розрядної ЕОМ Спр= 11/,11000000/11/0101/.

Приклад 2. Знайти суму чисел А=-0,1100×24 та В=-0,1000×24. Мантиси і порядок обробляються на ДСОК у ФРК (шість розрядів мантиси і чотири для порядку). Порядки [PA]=[PB]=[PC]об= 0,100 (оскільки позитивні і рівні обидва порядки операндів А і В).

 

+[mА]об=11/,0011

[mB]об=11/,0111

[mC]об=110/,1010

+ a→ → 1

10/,1011 (δ=0, γ=1)

Порушення нормалізації справа (тобто γ=1 означає, що було переповнення). Число зсуваємо вправо на один розряд, відновлюючи знак 11 і одночасно збільшуючи порядок Р на 1.

Тобто [mC]об=11/,0101, тепер δ=0, γ=0. Одночасно коректуємо і порядок:

+[Рс]= 00/100

]=00/001

00/101 (+5), тоді відповідь: -0,1010×2+5 (Самостійно зробіть запис Спр для 16-ти розрядної ЕОМ).

10 СКЛАДАННЯ ЧИСЕЛ ПРИ РІЗНИХ ЗНАЧЕННЯХ ПОРЯДКІВ

Для операції складання чисел необхідною умовою є зіставлення вагів розрядів операндів один одному. Тому спочатку потрібно вирівняти порядки, що спричинить за собою тимчасове порушення нормалізації одного з доданків (А або В).

Вирівнювання порядків означає, що порядок меншого числа треба збільшити на величину ΔР=рав , що означає зсув мантиси меншого числа вправо на кількість розрядів, рівне рарв. Тому, цифровий автомат повинен спочатку розпізнати, який порядок з двох чисел є меншим. На це вкаже знак ΔР. Якщо рарв - знак позитивний і навпаки, якщо знак негативний, то РА < РВ. Цю операцію іноді виконують шляхом порівняння чисел.

10.1 Алгоритм операції складання у форматі з рухомою крапкою (комою)

Отже, операція складання (віднімання) виконується в наступній послідовності.

1. Перевести операнди в двійкові доповняльні (або обернені) модифіковані коди, перевіривши перед цим нормалізацію початкових чисел.

2. Визначити різницю порядків ΔР = ра-рв

3. Якщо ΔР>0, зсунути мантису числа В на ΔР розрядів вправо; якщо ΔР<0, зсунути мантису числа А на ΔР розрядів вправо; якщо ΔР=0, мантиси не зсуваються (розряди виходять за межі розрядної сітки мантиси втрачаються).

4. Виконати операцію алгебраїчного складання (віднімання) над мантисами. Алгебраїчне складання виконується за наступним правилом. Аналізується знак числа:

- якщо знак позитивний (00), то в суматор мантиси число поступає в прямому коді;

- якщо знак негативний (11), то в суматор мантиси число поступає в доповняльному (оберненому) коді;

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

До представлення результату в прямому коді, після складання, аналізується знак результату:

- якщо знак 01(або 10), то знак спочатку відновлюється шляхом зсуву мантиси вправо на один розряд з одночасним збільшенням порядку на 1;

- якщо знак 00, то результат- число позитивне, представлено в прямому коді;

- якщо знак 11, то результат- число негативне і представлено в оберненому (доповняльному) коді.

В цьому випадку, потрібне перетворення числа із оберненого (доповняльного) в прямий код, шляхом інвертування числа (окрім знаку) для ДСОК і інвертування числа (окрім знаку) з додаванням 1 до молодшого розряду мантиси для ДСДК. Результату встановлюється порядок більшого за модулем числа.

5. Проводиться перевірка числа на нормалізацію (для нормалізованих чисел, після знаку мантиси повинна стояти одиниця). Якщо після знаку мантиси стоїть нуль, то число зсувається вліво на один розряд (з одночасним зменшенням порядку на 1). Перевіряється нормалізація (перевіряємо ознаки порушення γ і δ). Цикл може повторюватися до досягнення умов нормалізації γ=0 і δ=0). За цим алгоритмом виконують операції складання і віднімання АЛП.

Приклад. Скласти А=+0,1011×2-2 и В = -0,1001×2-3

Числа задані в природному вигляді. В АЛП використовується два суматори оберненого коду: суматор мантис (шість розрядів, включаючи знак); суматор порядків (разом із знаком - чотири розряди).

РІШЕННЯ.

1. Враховуючи, що числа задані вже в нормалізованому вигляді (після коми стоїть 1), представимо їх в машинному вигляді у форматі з рухомою крапкою (модифікований код): Ампр=00.1011.11.10; Вмпр=11.1001.11.11.

2. Переводимо мантиси чисел в обернені коди: mАоб=00.1011; mВоб=11.0110.

3. Для вирівнювання порядків чисел, а значить, і їх вагових розрядів, необхідно з’ясувати, яке із заданих чисел підлягає тимчасовій денормалізації. Для цього автоматом визначається різниця порядків чисел: DР=РАРВ. Переведемо порядки чисел в обернені коди.

РАоб=11.01 ; РВоб=11.00. Тоді, DР=РАоб-РВоб =11.01–11.00

Замінимо операцію віднімання на операцію складання.

DР=РАоб-РВоб = РАоб +`РВпр =11.01 + 00.11 (де РВпр - інверсний код РВоб., включаючи і знакову частину).

 

Виконаємо додавання.

11.01

+00.11

100.00

+a→1

00.01

Величина DР позитивна, тому РА > РВ. Треба зсувати мантису числа вправо на DР розрядів, тобто на один розряд, збільшивши одночасно порядок на 1.

4. Зсунемо мантису числа В вправо на один розряд і складемо їх значення на ДСОК.

5. Перевіримо умову нормалізації мантиси результату справа, зліва.

 

mАоб=00.1011 (тут δ=0, γ=0) mBоб=11.0110 (тут δ=0, γ=1, необхідно зробити зсув mBоб вправо) mBоб=11.1011 +mAоб=00.1011 mCоб=100.0110 a→→ 1 00.0111 (тут δ=1, γ=0; необхідно зробити зсув вліво) mCоб=00.1110 і тому робимо корекцію порядку на ∆Р=–1 РАоб=11.01 +∆Роб= 11.10 (Р представлено в оберненому коді) 110.11 +a→1 РСоб=11.00 Результат РСоб отриманий в оберненому коді, тобто знак негативний (11). Визначаємо прямий код порядку і записуємо результат Спр=00.1110×2-3. Відповідь: Спр=00.1110.11.11

 


Приклад. Скласти на ДСДК числа Апр= +5, Впр= -3, представлених в десятковій системі числення. Ад=00/5; Вд=99/7. Проведемо складання Ад+Вд=00/5+99/7=100/2=00/2 (+2(10)). Одиниця (1) пропадає, оскільки складання йде на ДСДК.

 

 

11 МНОЖЕННЯ ДВІЙКОВИХ ЧИСЕЛ

 

11.1 Методи множення бінарних чисел

Розглянемо основні способи виконання операції множення для різних систем. Найпоширенішим способом множення чисел є спосіб порозрядного множення множеного на множник, починаючи з молодшого розряду (1-й спосіб), починаючи зі старшого розряду (2-й спосіб). Розглянемо приклад:

 
 

 


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

У двійковому численні це завдання значно спрощується, оскільки множити порозрядно немає необхідності. Насправді, якщо множити множене на "1", то це повторення множеного із зсувом на один розряд вправо (вліво), а на "0" - записуються одні нулі із зрушенням.

 
 

 

 

 

 


В обох випадках операція множення складається з ряду послідовних операцій зсуву і складання часткових добутків. Таким чином, операція множення зводиться до складання часткових добутків, які виходять з множеного або нулів, якщо в розряді множника «нуль», або множеного, якщо в розряді множника «одиниця» і відповідним або зсувом.

Окрім операції складання, при виконанні множення, з’являється операція зсуву чисел. При цьому, можливі два варіанти:

- зсувати множене відповідно до вказівок множника;

- зсувати суму часткових добутків.

Розглянемо основні методи виконання операції множення ЦА.

МЕТОД 1. Нехай А - множене > 0, В - множник > 0, а С - добуток.

Запишемо числа у ФФК: A=0,α1α2,...,αn; B=0,b1,b2,...,bn (А і В правильні дроби). В - множник і він визначає розрядність С (чим він більший, тим більша розрядність С). Тоді, B=b1×2-1+b2×2-2+...+bn×2-n.

Звідси: C=A×B = 0,α1α2... αn(b1×2-1+b2×2-2+.. .+bn×2-n)=

=(2-1×0,α1α2... αn)bl+(2-2×0,α1α2... αn)b2+...+(2-n×0,α1α2... αn)bn.. (11.1)

Множник 2-n означає зсув на n розрядів вправо числа, що укладено в дужки, тобто зсуваэться вправо множене і множення на множник починається зі старших розрядів. Структурно це зображено на рис. 11.1.

Рисунок 11.1 - Метод множення зі зрушенням вправо множеного

МЕТОД 2. Нехай A=0,α1α2... αn - множене; B=0,blb2...bn - множник. Перетворимо множник по методу Горнера:

B=(...((bn×2-1+bn-1)×2-1+bn-2)×2-1+...+b2)×2-1+b1)×2-1.

Тоді,

C=A×B=(...(bn×0,α1α2...αn)×2-1+bn-1×0,α1α2...αn)×21+...+b1×0,α1α2...αn)2-1, (11.2)

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

Рисунок 11.2 - Метод множення зі зрушенням вправо суми часткових добутків

МЕТОД 3. Нехай A=0,α1α2...αn - множене; B=0,blb2...bn – множник. Використовуючи метод Горнера, запишемо множник:

B=2-n(b1×2n-1+b2×2n-2+...+bn-1×21+bn×20). Тоді,C=A×B=

=2-n(bn×0,α1α2...αn+(21×0,α1α2...αn)×bn-1+...+(2n-1×0,α1α2...αn)×b1 (11.3)

 

Це означає: множення починається з молодших розрядів і множене зсувається вліво на один розряд у циклі. Структура представлена на рис.11.3.

Рисунок 11.3 - Метод множення зі зрушенням вліво множеного на один розряд у циклі

МЕТОД 4.Нехай A=0,α1α2...αn - множене; B=0,blb2...bn – множник. Запишемо В - множник по методу Горнера, як у попередньому методі. Тоді, C=A×B=

=2-n(...(21(b1×0,α1α2...αn)+b2×0,α1α2...αn)21+…

+bn1×0,α1α2...αn)21+ +bn×0,α1α2...αn). (11.4)

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

Рисунок 11.4 - Метод множення зі зрушенням вліво суми часткових добутків

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

 

11.2 Множення чисел з фіксованою крапкою (комою) на ДСПК

Запишемо машинне зображення множеного і множника у формі з фіксованою комою в прямому коді. Anp=Sg,α1α2...αn; Bпр=Sg,b1b2...bn. Тоді, їхній добуток запишеться як Cnp=Sg,с1с2...сn, де SgС=SgАÅSgВ, де Å - знак додавання функції «Σ по mod2» ( її ТІ: 1Å1=0, 0Å0=0, 1Å0=1, 0Å1=1).

Таким чином, при використанні ДСПК, знак добутку визначається окремо від цифрової частини, потім виконується операція множення. Вона виконується відповідно до заданої структури множного пристрою (див. наприклад, рис. 11.5) і методу множення (див. наприклад, метод 2).

За методом 2 множення починається з молодшого розряду і зсувається вправо сума (Σ) часткових добутків.

Рисунок 11.5 - Структура ЦА для пристрою множення чисел з фіксованою комою

Приклад. Помножити Апр=11/11010 (-26); Впр =00/11001 (25), С= -650.

РІШЕННЯ: Визначається знак добутку С: 1Å0 =1.

Приймемо:

1) суматор має 10 розрядів (без знака).

2) регістри мають по 5 розрядів (без знака).

Послідовність дій представимо таблицею 11.1

Для спрощення запису таблиць, приймемо наступні умовні позначки:

- оператор := привласнення значення (блоку ліворуч привласнюється значення, що є праворуч );

- позначення, наприклад, [См] - вміст суматора;

- оператор[]зсуву вмісту, наприклад, регістра А вправо наодин розряд;

- позначення В. П. - вхідне положення;

-позначення Апр, Впр- цифрова частина множенного, множника (прямий код).

Відповідь: Спр= 11/1010001010.

Таблиця 11.1 - Приклад рішення

Якщо при множенні виникає одиниця переносу зі старшого розряду, то її зберігають шляхом зсуву суматора (å), тобто необхідно передбачати в ЦА стробування (фіксування) сигналу переповнення для виробу зсуву на один розряд вправо. Цей спосіб одержав найбільше поширення в практиці ЦА.

11.2.1 Множення чисел з рухомою комою

Числа у ФРК представляються мантисою і порядком, тому виконання операції множення складається із двох дій:

- перемножування мантис;

- додавання порядків.

Рисунок 11.6 - Структура ЦА для пристрою множення чисел у ФРК

Результат множення може вийти денормалізованим, тому потрібна перевірка на нормалізацію числа (критерій δ) та, при необхідності, його нормалізація з відповідною корекцією порядку Р результату. Пристрій множення чисел із рухомою комою представлено ЦА зі структурою рис. 11.6.

Таблиця 11.2 - Перемножування мантис А і В.

Приклад. А= -0,11001×2-3; В=0,10011×21 (перемноження мантис здійсніть самостійно зг. п. 11.2. Суматор - 10 розрядів, Рг для А і В – по 5 розрядів). Додавання порядків робимо на ДСОК у ФРК.

 

[РА]об =11/100

[РВ ]об=00/001

[PС]об=11/101 [С]пр = 11/010; Спр=-010(2)

Тому що мантиса результату не задовольняє нормалізації (тобто δ=1, γ =0), то робимо зсув мантиси вліво на один розряд (див. табл.9.2) і проводимо корекцію порядку: m=11/1110110111.

+[РС]об = 11/101

[DР ]об = 11/110

111/011

a→→1

[РС]’об = 11/100; [РС]’пр=11/011 (-3).

Відповідь: С= -0,1110110111×2-3

 

11.2.2 Особливі випадки при множенні

При множенні можуть спостерігатися наступні особливі випадки:

- один зі співмножників = 0. Операція блокується з видачею результату С = 0;

- порядок результату дорівнює найбільшій негативній величині. Формується "0";

- множене найбільше і негативне число. Збільшується множене на 2n-1 тобто, зсувається вліво.

Корекції роблять за допомогою аналізаторів, що вводять у ЦА.

ПРАВИЛО. Якщо в якості множника виступає число зі степінного ряду вагових значень бінарної системи, то множення проводиться зсувом числа вліво на число розрядів, що дорівнює ступені множника.

Приклад. Помножити А=+00011 (+3); В=+00100 (+4=22). С=00011 ×00100= 00011×(22)= 01100.