Смекни!
smekni.com

Розробка управляючого і операційног вузлів ЕОМ (стр. 4 из 7)

Якщо X < 0 і Y < 0, то частку необхідно збільшити на одиницю у випадку залишку від ділення, яка рівна нулю.

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

2.8.1 Арифметичний пристрій з фіксованою крапкою (Чу стр. 130-135)

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

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

Знаковий біт

1 Число 22 S

малюнок 4.1 (Чу стр. 131)

Представимо число у вигляді цілого. Це представлення має вид “знак + модуль”. Нуль в знаковому біті означає, що число додатнє, а одиниця – що воно від’ємне. Для числа, модуль якого дорівнює нулю, в знаковому біті завжди формуєтсья одиниця.

Будемо використовувати регістри AC – накопичуючий регістр,
MQ – регістр частки, SR – запам’ятовуючий регістр, SC – лічильник зсувів. Використовується схема паралельного суматора і регістр DVOV. AS, MQ, SR, складаються з двох частин: в одній зберігається знак, а в другій – модуль числа. Отже, ми використовуємо субрегістри для знаку AS(S), MQ(S), SR(S)
і субрегістри модуля AS(M), MQ(M), SR(M). Субрегістром називається частина регістру, сукупність бітів якої мають особливий зміст. Об’єднання декількох субрегістрів або регістрів при виконанні спеціальної операції в один регістр називається касрегістром.

Регістр DVOV сигналізує про стан переносу при діленні.

Ми не будемо його використовувати.

Структура:

AC(M) = AC(1 – 23),

SR(M) = SR(1 – 23),

MQ(M) = MQ(1- 23).

AC(S, R, Q, 1- 23),

SR(S, 1 - 23),

MQ(1 – 23),

SC(0 – 5),

C.

Паралельний суматор:

ADD(R, Q, 1 – 23) = ADSR(R, Q, 1 – 23) EXOR ADAC(R, Q, 1 – 23)
EXOR C(R, Q, 1 – 23),

C(R, Q, 1 – 22) = ADSR(Q, 1 – 23)*ADAC(Q, 1 – 23) + ADAC(Q, 1 – 23)
*C(Q, 1 – 23) + C(Q, 1 – 23) * ADSR(Q, 1 – 23), C(23) = 0.

Опис виводів Z:

Z(R, Q, 1 – 23) = 0 – 0 – AC(M) add2 0 – 0 – SR(M) – 0.

Опис оператора add2:

W(R, Q, 1 – 23) = X(R, Q, 1 – 23) add2 Y(R, Q, 1 – 24)

C(23) = Y(24),

C(R, Q, 1 – 22) = X(Q, 1 – 23)*Y(Q, 1 – 23) + Y(Q, 1 – 23)*C(Q, 1 – 23) + C(Q, 1 – 23)*X(Q, 1 – 23)

W(R, Q, 1 – 23) = X(R, Q, 1 – 23) EXOR Y(R, Q, 1 – 23) EXOR
C(R, Q, 1 – 23).

Тут в регістрі АС є біт АС(Q), який міститься між знаковим бітом і старшим бітом значущої частини регістру. В цьому біті міститься перенос з старшого біту значущої частини, який утворюється при додаванні або віднімані. Розряд АС(R) містить перенос з біту АС(Q).

В нашій схемі звичайно використовуються однобітні повні суматори,
що мають по три входи і два виходи. На схемі 4.3 i-ий біт першого
доданку – ADAC(i), j – біт другого доданку ADSR(i), i – ий біт переносу – C(i),
(i – 1) – й біт переносу C(i – 1) і i – ий біт суми – ADD(i), де i – номер розряду паралельного суматора.

C(i)

ADAC(R, Q, 1 – 35)

ADAC(i)

ADSR(i)

C(35)

ADSR(R, Q, 1 – 35)

Паралельний
суматор

ADD(R, Q, 1 – 35)

ADD(i)

C(i-1)

C(R, Q, 1 – 34)

малюнок 4.3 та 4.4 (Чу стр. 134)

На малюнку 4.4 входи ADAC(R, Q, 1 – 23) і ADSR(1 - 23) з’єднані з виходами регістрів АС(R, Q, 1 –23) і SR(1 – 23) відповідно. На входи ADSR(R, Q) сигнали з регістру SR звичайно не поступають. Замість цього при необхідності на цих шинах формуються константи 0 або 1. Вхід С(23) на якому повинен бути 0 є входом переносу для крайнього правого біту суматора. Входи
ADD(R, Q, 1 – 23) являють біти суми, а виходи С(R, Q, 1 – 23) – переноси для всіх 26 однобітних повних суматорів. Схема паралельного суматора зображена на малюнку 4.5.

малюнок 4.5 (Чу стр. 134)

В алгоритмі ділення виконується перевірка однієї з спеціальних вихідних шин паралельного суматора. Частина цих шин зв’язана з входами субрегістру АС(M),
а друга – з входами субрегістру SR(M). Це і є виводи Z.

Оператор add2 виконує додавання значущих частин двох 26 – бітних двійкових чисел; у цьому випадку вхідний перенос С(23) = 0. Його зручно використовувати також при додаванні додаткового коду від’ємника з зменшуваного (вілнімання); в такому випадку вхідний перенос С(23) = 1.
Таким чином, вхідний пернос розглядається як додатковий вхід паралельного суматора; потрібна модифікація додавання описується оператором add2.

2.8.1.1 Ділення (Чу стр. 144 – 148)

При діленні чисел, представлених у форматі з фіксованою комою ділене знаходиться в касрегістрі, який додається з регістрів АС і MQ, а дільник – в регістрі SR; частка поміщається в регістр MQ, а залишок – в регістр AC.
Дільник після виконання операції залишається в регістрі SR; ділене в касрегістрі губиться. Алгоритм ділення побудований на основі використання методу порівняння. Його зручно розділити на дві частини: ініціалізація (малюнок 4.11) і відповідно ділення (малюнок 4.12)

малюнок 4.11 (Чу стр. 144)

малюнок 4.12 (Чу стр. 145)

При ініціалізації перевіряється чи не буде переповнення, і визначається знак частки. Переповнення при діленні визначається шляхом віднімання діленого з дільника (субрегістри AC(M) і SR(M)). При відніманні до дільника додають ділене з субрегістру AC(M) в оберненому коді. Якщо перевірка показує, що значення на шині суми Z(Q) = 0 то з цього слідує, що ділене з AC(M) більше або дорівнює дільнику з SR(M). При переповненні в регістр DVOV засилається одиниця, і процес ділення завершується. Якщо ж перевірка показує, що Z(Q) = 1, то процес ініціалізації продовжується і визначається знак частки. Знак частки записується як нуль, якщо знакові біти AC(S) і SR(S) співпадають; в іншому випадку в M(Q) засилається одиниця. Потім проводиться запуск процесу ділення.

При діленні значення часткового залишку в субрегістрі AC(M) зберігається в оберненому коді. Процес починається з засилки в регістр лічильника зсувів SC константи 2310. Далі вміст касрегістру AC(M) – MQ(M) зсувається вліво на один біт; одночасно біт MQ(1) інвертується і переміщується в біт AC(23) для того, щоб частковий залишок в субрегістрі AC(M) залишався в оберненому коді. Дільник з субрегістру SR(M) порівнюється з частковим залишком AC(M). Якщо порівняння показує, що Z(Q) = 0, то це означає, що частковий залишок з AC(M) більше дільника з SR(M) або дорівнює йому. В цьому випадку в біт MQ(23) засилається одиниця і одночасно дільник з SR(M) додається до часткового залишку з AC(M). Якщо ж Z(Q) = 1, то це означає, що дільник з SR(M) більше часткового залишку AC(M); у цьому випадку пересилка і додавання не відбуваються. Далі вміст лічильника зсувів SC зменшується на одиницю і перевіряється на нуль. Якщо вміст SC <> 0, то алгоритм продовжується до вичерпання SC. Далі частковий залишок в AC(M) перетворюється в вихідне представлення шляхом інвертування всіх бітів. На цьому процес ділення завершується.

Процедурний опис ділення:

Ділене = + 00001111 = + 1510,

Дільник = - 0011 = - 310,

Частка = - 0101 = - 510,

Залишок = + 0000 = 0.

AC(R, Q, M) ¬ 0 – 0 – AC(M)’;

IF (Z(Q) = 1) THEN (DVOV ¬ 1, GOTO C2);

IF (SR(S) = AC(S)) THEN (MQ(S) ¬ 0) ELSE (MQ(S) ¬ 1);

SC ¬ 35;

AC(M) – MQ(M) ¬ AC(2 – 35) – MQ(1)’ – MQ(2 – 35) – 0;

IF (Z(Q) = 0) THEN (MQ(35) ¬ 1, AC(R, Q, M) ¬ 0 – 0 – AC(M) add2
0 – 0 SR(M) – 0;

SC ¬ countdn SC;

IF (SC <> 0) THEN (GOTO C1);

AC(M) ¬ AC(M)’

END

2.8.1.2 Мікропрограми арифметичного пристрою
(Чу стр. 177)

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

Мікропрограма ділення також додається з чотирьох мікрокоманд: D1, D2, D3, D4. Мікрокоманда D1 пересилає адрес операнду з регістру K в адресний регістр AD і витягує операнд з основної пам’яті.D2 – ініціалізаація; D3 - ділення; D4 – завершення.

F ¬ CM(H),

AD ¬ K,

SR ¬ M(AD),

H ¬ countup H.

F ¬ CM(H),

AC(R, Q, M) ¬ 0 – 0 AC(M)’,

IF Z(Q) <> 1) THEN (DVOV ¬ 1, BR(1) ¬ 1)

ELSE (BR(2) ¬ 1),

IF (BR(2) = 1) THEN (MQ(S) ¬ SR(S) EXOR AC(S), SC ¬ 35),

IF(BR(1) = 1) THEN (H ¬ F(ADS))

ELSE (H ¬ countup H),

IF (BR(1) = 1) THEN (DO DSET),

BR ¬ 0.

F ¬ CM(H),

SC ¬ countdn SC,

AC(M) – MQ(M) ¬ AC(2 – 35) MQ(1)’ – MQ(2 – 35) – 0,

IF (Z(Q) <> 1) THEN (MQ(35) ¬ 1,

AC(R, Q, M) ¬ 0 – 0 – AC(M) add2 0 – 0 SR(M) – 0),

IF (SC = 0) THEN (H ¬ countup H).

F ¬ CM(H),

AC(M) ¬ AC(M)’,

H ¬ F(ADS),