A(4 – 1) регістр розряду 100
B(4 – 1) регістр розряду 101
C(4 – 1) регістр розряду 102
D(0 – 3) лічильник
Q(1 – 12) регістр вихідного числа
T(0 – 2) регістр управління
K(0 – 4) = T декодер
Оператор cor:
X ¬ cor X(4 – 1),
IF (X = 5, 6, 7, 8, 9) THEN (X ¬ X add 3).
Перетворення відбувається в касрегістрі C – B – A.
A ¬ 0
B ¬ 0
C ¬ 0
D ¬ 10
FINI ¬ OFF
A ¬ cor A
B ¬ cor B
C ¬ cor C
C – B – A – Q ¬ shl C – B – A – Q
D ¬ countdn D
D = 0
FINI ¬ ON
На першому кроці касрегістр встановлюється в 0. Потім вміст касрегістру C – B – A – Q зсуваєтсья на один біт вліво, і тоді в регістр A попадає старший біт числа, що перетворюється. На кроці 3 перевіряєтсья чи потрібна корекція вмісту регістрів A, B, C, тобто чи не містить хоча б один з них числа,
що більше, ніж 4. Описані мікрооперації зсуву вліво і умовної корекції повторюються до тих пір, поки останній біт регістру Q не попаде в регістр A.
A ¬ 0, B ¬ 0, C ¬ 0, D ¬ 0, FINI ¬ OFF, T ¬ 0
C – B – A – Q ¬ Shl C – B – A – Q, T ¬ 1
D ¬ countdn D, T ¬ 2
IF (D = 0) THEN (T ¬ 4) ELSE (T ¬ 3),
A ¬ cor A, B ¬ cor B, C ¬ cor C, T ¬ 0
FINI ¬ ON
Перетворення з десяткової системи у двійкову є складнішим. Тому ми не будемо його використовувати.
2.8 Структура і мікропрограми АЛП
для ділення чисел з фіксованою крапкою.
(Каган ст. 211, 213-219)
Ділення в ЕОМ звичайно зводиться до виконання послідовності віднімання дільника спочатку з діленого, а потім з утворюючихся в процесі ділення часткових залишків і зсуву часткових залишків.
Реалізувати ділення можна двома основними способами.
1. Ділення з нерухомим діленим і зсуваючим вправо дільником.
Цей спосіб ділення заснований на прямому копіюванні дій при ручному діленні. Структура АЛП для ділення має вигляд, який зображений на
малюнку 6-8, а.
мал. 6-8 а) (Каган стр. 214)
Початкове ділене X заноситься в PгX, а дільник Y – в старші розряди Pг1Y. Дільник зсувається вправо шляхом косої передачі з Pг1Y в Pг2Y і прямої передачі з Pг2Y в Pг1Y. Віднімання дільника виконується підсумувуванням додаткового коду дільника. Цифри частки залишків, які визначають по знаку часткових залишків, фіксується в регістрі Pг1Z шляхом послідовного занесення їх в молодший розряд Pг1Z і зсуву вмісту Pг1Z з допомогою косої передачі в Pг2Z і прямої з Pг2Z в Pг1Z.
Недоліком такого АЛП є подвійна довжина суматора і його регістрів.
2. Ділення з нерухомим дільником і зсувом вліво діленого.
Цей спосіб дозволяє будувати АЛП з суматором одиночної довжини (малюнок 6-8, б).
малюнок 6-8, б (Каган стр. 214)
Тут нерухомий дільник Y зберігається в PгY, а ділене X, зсуваючись вліво відносно Y, знаходиться в двох регістрах: старші розряди X – в Pг1X,
а молодші – в Pг2X. Ділення починається з зсуву вліво діленого X шляхом косої передачі його в PгCm і Pг3X і відповідних прямих передач в Pг1X. Далі на вхід суматора подається зсунуте вліво ділене, утворюється частковий залишок шляхом підсумовуванням додаткового коду дільника, і наступна цифра частки заноситься в звільнений при зсуві X розряд Pг2X.
Арифметично-логічний пристрій розглянутого типу широко застосовується для ділення.
Алгоритм ділення з нерухомим дільником з відновленням залишку.
1. Берутся модулі від діленого і дільника.
2. Початкове значення часткового залишку покладається рівним старшим розрядам діленого.
3. Частковий залишок подвоюється шляхом зсуву на один розряд вліво.
При цьому в звільнений при зсуві молодший розряд часткового залишку заноситься наступна цифра діленого.
4. З зсунутого часткового залишку віднімається дільник і аналізується знак результату віднімання.
5. Наступна цифра модуля частки рівна 1, якщо результат віднімання додатній, і 0, якщо від’ємний. В останньому випадку значення остачі відновлюється до того, яке було до віднімання.
6. Пункти 3, 4 і 5 послідовно виконуються для одержання всіх цифр модуля частки.
7. Знак частки плюс, якщо знаки діленого і дільника однакові, в іншому випадку – мінус.
Розглянемо тепер більш детально ділення в АЛП з нерухомим дільником. Структурна схема АЛП дана на малюнку 6-9.
малюнок 6-9 (Каган стр. 215)
Схема містить: суматор Cm; вхідний регістр Pг1 для збереження дільника; вхідний регістр суматора PгA, в який поступає прямий або зворотній код дільника; вихідний регістр суматора PгCm, в якому утворюється частковий залишок; регістри діленого PгB (старші розряди) і Pг2 (молодші розряди); допоміжний регістр Pг2’ для зсуву діленого, тригери знаків діленого і дільника ТгЗн1 і ТгЗн2; лічильник циклів СчЦ для підрахунку числа одержаних цифр частки. Одержані в процесі ділення цифри частки заносяться в звільнені розряди Pг2’.
Мікропрограма ділення для випадку додатніх чисел приведена на
малюнку 6-10. Пояснемо процедуру відновлення остачі.
малюнок 6-10 (Каган стр. 217)
Якщо віднімання дає від’ємний результат (См[0] = 1), то попередній частковий залишок, який зберігається в PгB, передається в PгCm, для чого попередньо обнулюється PгA. В PгCm прийом здійснюється з зсувом вліво на
1 розряд. Це забезпечує відновлення попереднього часткового залишку і зміщення його відносно дільника перед наступним відніманням.
Мікропрограма, яку ми розглядаємо, призначена для обробки додатніх чисел. А також її можна легко перетворити для обробки чисел з любими знаками,
які представленні в прямому коді. Для цього треба внести такі зміни:
після прийому операндів в PгB, Pг2 і Pг1 значення знакових розрядів X і Y передаються в тригер знака – відповідно ТгЗн1 і ТгЗн2. Потім в PгB [0] і Pг1 [0] заноситься 0, тобто виконується перехід до модулів X і Y. Розряд знаку частки встановлюється в 0 при ТгЗн1 = ТгЗн2 і в 1 в протилежному випадку.
Розглянутий метод ділення носить назву ділення з відновленням залишку. Недоліком цього методу є необхідність введення спеціального такту для відновлення залишку.
Звичайно в ЕОМ для ділення використовується другий метод – ділення без відновлення залишку.
Алгоритм ділення з нерухомим дільником без відновлення залишку.
Пункти 1-3 співпадають з алгоритмом ділення з відновленням залишку.
4. З зсунутого часткового залишку віднімається дільник, якщо залишок додатній, і до зсунутого часткового залишку додається дільник, якщо залишок від’ємний.
5. Наступна цифра модуля частки рівна 1, якщо результат віднімання додатній, і 0, якщо від’ємний.
Пункти 6, 7 співпадають з попереднім алгоритмом.
Можна показати, що часткові залишки після виконання додавання при діленні без відновлення залишку одержуються такі самі, як і залишки після зсуву відновленного залишку при діленні з відновленням залишку.
Дійсно, оскільки зсув часткового залишку на один розряд вліво є еквівалентом множення його на два, одержимо: 2*a – b = 2*(a – b) + b, (6-5),
де a – частковий залишок; b – дільник.
Аналогічно
2na = {…{[(a – b)*2 + b] + b}*2 + … + b}. (6-6)
Ділення без відновлення залишку завжди потребує для одержання одної цифри частки тільки додавання або віднімання з зсуву часткового залишку.
Мікропрограма ділення цілих додатніх чисел без відновлення залишку у своїй початковій частині співпадає з мікропрограмою ділення без відновлення залишку. Різниця з’являєтья після формування знаку частки. На малюнку 6-11 приведена частина мікропраграми ділення без відновлення залишку після мікрокоманди фіксації знаку частки.
малюнок 6-11 (Каган стр. 219)
Блок-схема показує, що поки невизначені всі цифри частки (СчЦ <> 0),
в залежності від знаку часткового залишку або підсумовується Y (при См [0] = 1), або віднімається Y (при См [0] = 0). В одержаному новому частковому залишку аналізується знак і в ньому визначається цифра частки. Після завершення всіх циклів ділення (СчЦ = 0) видається реультат. При цьому якщо залишок від’ємний, то він відновлюється шляхом підсумуванням Y.
Ділення чисел, що представленні в залежності від знаку прямим доповнюючим кодом, можна зробити не переходячи до модулів. При цьому алгоритм ділення є подібним до розглянутих.
Відмінності заключаються в наступному (для випадку ділення без відновлення залишку):
1. Так як ділене і дільник можуть мати різні знаки, то дія з частковим залишком (додавання або віднімання Y) залежать від знаку залишку і дільника і визначаються таблицею 6-4.
Знак залишку | Знак дільника | Дія |
+ | + | Віднімання Y |
+ | - | Додавання Y |
- | + | Додавання Y |
- | - | Віднімання Y |
таблиця 6-4 (Каган стр. 219)
Якщо знак залишку співпадає з знаком дільника, то zi = 1, інакше zi = 0.
2. Якщо X > 0 і Y < 0, то частку необхідно збільшити на одиницю.
Якщо X < 0 і Y > 0, то частку необхідно збільшити на одиницю у випадку залишку від ділення, яке не дорівнює нулю.