Для ілюстрації функціональних особливостей канонічного алгоритму операції ділення доповняльних кодів (DК) побудуємо блок ділення, в якому аргументи і результат визначаються за наступними форматами:
А = NА a a a a a a ;
B = NB b b b ; D = ND d d d ;
C = NC c c c ,
де NA , NB , ND , NC - знак доповняльного коду відповідно діленого, дільника, частки, остачі;
a a a a a a , b b b , d d d , c c c – цифрова частина доповняльного коду відповідного діленого, дільника, частки і остачі.
Відомо, що за додатних значень частки її зображення в доповняльному і прямому кодах подаються однаково:
D = D = 0 d3 d2 d1 ( 3.60 )
де 0 - значення знакового розряду додатної частки;
d3 d2 d1 – значення цифрових розрядів додатної частки у прямому виді.
У зв’язку з цим, для утворення цифрових розрядів доповняльного коду за додатних значень частки достатньо визначити значення цифр частки в пря-мому виді за допомогою будь-якого загального алгоритму операції ділення.
Для від’ємних значень частки прямий і доповняльний код частки пов’язані більш складними співвідношеннями. У цьому випадку, щоб пристосувати загальні алгоритми визначення значень цифр частки в прямому виді до утворення результату в доповняльному коді, спочатку доцільно сформувати обернений до прямих значень рядок цифр частки, тобто обернений код цифрової частини частки, а на завершальному етапі – розшукуваний доповняльний код від’ємної частки. Алгоритм перетворення оберненого коду від’ємної частки в еквівалентний доповняльний код випливає з базових формул визначення оберненого і доповняльного кодів:
D = 15 + D;
D = 16 + D = (15 + D) + 1,
де D – двійковий код від’ємної частки.
Звідси дістанемо:
D = D + 1, ( 3.61 )
де D - обернений код від’ємної частки .
Таким чином, згідно з (3.61) для обчислення доповняльного коду від’ємної частки D попередньо потрібно визначити інверсні значення цифро-вих розрядів модуля частки, а потім виконати корекцію (виправлення) утвореного оберненого коду шляхом додавання одиниці до його молодших розрядів.
Узагальнюючи (3.60) і (3.61) маємо:
D = ND d d d + ND, (3.62)
де ND = (NA Å NB) – знак результату (частки);
(d d d ) – цифрові розряди оберненого коду частки;
d3d2d1, якщо ND = 0;
, якщо ND = 1,
де (d3d2d1) – цифрові розряди модуля частки ( MD = |D| = d3d2d1);
( ) – порозрядна інверсія цифрових розрядів модуля частки.
Таким чином, до визначення цифр частки як за алгоритмом (3.60), так і за алгоритмом (3.61), спочатку потрібно знайти знак результату на підставі звичайного співвідношення для знаків:
ND = (NA Å NB), ( 3.63 )
тобто 1, якщо NA ≠ NB;
0, якщо NA = NB.
На наступному рівні програми ділення А на В встановлюється можливість переповнення розрядної сітки цифрової частини частки. Для цього, як зазначалося раніше, у пробному циклі обчислюється розшир розрядної сітки частки D. У зв’язку з цим, доповняльний код частки формує-ться у розширеному форматі:
(DP) = ND d d d d + ND, ( 3.64 )
де (d d d d ) – цифрова частина розширеного формату оберненого коду частки;
dn d3d2d1, якщо ND = 0; ( 3.65 )
, якщо ND = 1; ( 3.66 )
d – розшир частки для виявлення ознаки переповнення розрядної сітки результату;
(DP) - розширений п’ятипозиційний формат доповняльного коду частки.
У залежності від знака частки ND і ознаки переповнення частки (d ) у розширеному форматі частки (3.64) можуть формуватися комбінації двійко-вих кодів:
ND d ND
(DP) ( d = 0, D ≥ 0) = 0 0 d d d + 0 ;
ND d ND
(DP) ( d = 0, D < 0) = 1 1 d d d + 1 ;
ND d ND
(DP) ( d = 1, D ≥ 0) = 0 1 d d d + 0 ;
ND d ND
(DP) ( d = 1, D < 0) = 1 0 d d d + 1 .
Звідси випливає, що ознаку переповнення оберненого коду частки ППОК у загальному випадку припустимо обчислювати за співвідношенням:
ППОК = (ND Å d ), ( 3.67 )
Очевидно, що згідно з властивостями оберненого коду D ознака переповнення оберненого коду ППОК не фіксується, якщо значення частки змінюється в замкнутому інтервалі:
- 111(-710) ≤ D ≤ +111 (+710).
В доповняльному коді частки обумовленого формату (D ) перетво-рення розрядної сітки частки не повинно виникати в діапазоні зміни аргумента:
- 1000(-810) ≤ D ≤ +111 (+710).
З наведеного випливає, що при утворенні частки D=-1000(-810), тобто за
ND d d d d ND d d d d
DР = 1 0 1 1 1 + 1 = 1 1 0 0 0
ознака переповнення доповняльного коду ППDК не повинна формуватися за ППОК = ND = 1 0 = 1.
Таким чином, за від’ємних значень частки у загальному випадку ознака переповнення оберненого коду частки ППОК після формування слушного результату в доповняльному коді на завершальному етапі операції ділення повинна уточнюватися за співвідношенням:
ППDК = ND . ( 3.68 )
Тепер докладно розглянемо алгоритми визначення розширеного п’яти-позиційного формату частки для довільного сполучення знаків діленого А і дільника В.
Спочатку припустімо, що ділене А > 0 (NA=0) і дільник В > 0 (NВ=0).
За цих умов залишок діленого у пробному кроці операції ділення визначається числовими змінними:
А = + МА(6/1); ( 3.69 )
ВР = + МВР(6/1), ( 3.70 )
де А, ВР – відповідно числові змінні діленого і розширеного формату дільника;
МА(6/1), МВР(6/1) = МВ(3/1) 000 – відповідно модулі діленого А і подвійного дільника В;
МВ(3/1) = b3b2b1 – рядок цифр модуля дільника за первинним форматом.
У даному випадку NA = NВ = 0 і знак частки ND = NA Å NВ = 0, тому згідно з (3.65) розшир частки визначається за співвідношенням:
= dn = d4.
Як відомо, четвертий розряд (розшир) частки d4 = 1 у тому випадку, коли
МА(6/1) ≥ МВР(6/1). ( 3.71 )
Отже, розшир частки dn = d4 потрібно обчислювати за нерівностями виду:
1, якщо А4 ≥ 0;
0, якщо А4 < 0, ( 3.72 )
де А4 = [МА(6/1) – МВР(6/1)] – залишок діленого у пробному кроці операції ділення.
Для визначення залишку діленого А4 через доповняльний код і перетворимо (3.72) наступним чином:
А4 = (+МА(6/1)) – (+МВР(6/1)).
Тоді згідно з ( 3.68) і (3.69) дістанемо:
А4 = А – ВР. ( 3.73 )
Із цих міркувань випливає, що доповняльний код залишку діленого А4 потрібно обчислювати за співвідношенням:
= ( - )m128 = ( + 128 - )m128 =
= ( + 127 - + 1)m128 = ( + +1)m128. ( 3.74 )
Згідно властивостей доповняльного коду маємо:
0, якщо А4 ≥ 0;
1, якщо А4 < 0, ( 3.75 )
де NA4 – знак числової змінної .
Із урахуванням (3.75) нерівності (3.72) можна подати у вигляді:
1, якщо NА4 = 0;
0, якщо NА4 = 1. ( 3.76 )
Через те, що при діленні (+МА) на (+МВ) знак дільника NB = 0, зна-чення розширу dn може бути пов’язано зі знаком дільника NB нерівностями виду:
1, якщо NА4 = NB;
0, якщо NА4 ≠ NB.
Звідси дістанемо:
d4 (dn ) = . ( 3.77 )
Приклади визначення розширу частки d і ознаки переповнення обер-неного коду частки при діленні (+МА)DK на (+МВ)DK подано на рис.3.20-3.21.
Припустімо, що обчислення наступної цифри частки d виконуються зі зсувом вправо дільника, тобто за алгоритмом «б».
Початковий стан числових змінних, за якими визначається наступна цифра частки d буде мати вигляд:
Рисунок 3.20 – Приклад визначення розширу частки
і ознаки ПП частки при діленні (+МА)DK на (+МВ)DK.
Рисунок 3.21 – Приклад визначення одиничних станів розширу