Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_lab_OFK.doc
Скачиваний:
13
Добавлен:
06.11.2018
Размер:
1.13 Mб
Скачать

1.1.1. Ділення з відновленням залишку

Найбільш очевидний алгоритм носить назву алгоритму ділення з нерухомим дільником і відновленням залишку. Зовні він дуже подібний на загальноприйнятий спосіб ділення у стовпчик. Даний алгоритм може бути описаний таким чином:

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

старшим розрядам діленого;

2. Частковий залишок подвоюється шляхом зсуву на один розряд вліво. При цьому

у його молодший розряд, що звільняється при зсуві, заноситься наступна цифра

частки;

3. Із зсунутого ЧЗ віднімається дільник і аналізується знак результату віднімання;

4. Наступна цифра модуля частки дорівнює 1, коли результат віднімання додатний, і

дорівнює 0, якщо він від’ємний. В останньому випадку значення залишку

відновлюється до того значення, яке було до віднімання.

5. Пункти 2 – 4 послідовно виконуються для отримання усіх цифр модуля частки.

Крім того, доцільно операцію віднімання при діленні чисел замінити додаванням дільника у доповняльному коді. Тоді значення переносу від додавання буде утворювати значення відповідного розряду частки.

Продемонструємо це на числах 20410 : 1210, 110011002 : 11002, але спочатку дільник (11002) подамо у доповняльному коді, що дозволить обмежитися додаванням у всіх випадках, коли потрібно виконувати додавання або віднімання: 1100пр = 1.0100доп. Частка формується у деякому регістрі С, незаповнені розряди якого позначатимемо через Х.

Починаємо віднімати дільник від діленого (фактично – додавати доповняльний код дільника). Якщо залишок виходить додатний, то у розряд частки записується 1, інакше - 0.

0. 11001100 ділене 20410

+ 1. 01000000 дільник 1210

10. 00001100 перший залишок

Оскільки залишок вийшов додатний і біт переносу = 1: С = 1ХХХХ. Далі зсувається перший залишок на один розряд вліво і від нього віднімається дільник:

0. 00011000

+ 1. 01000000

1. 01011000 другий залишок

Залишок від’ємний, біту переносу немає, тому у наступний розряд частки записується 0, С = 10ХХХ. Крім того, необхідно відновити залишок, тобто біти дільника повернути назад першому залишку, шляхом додавання дільника (у прямому коді) і другого залишку:

1. 01011000

+ 0. 11000000

0. 00011000 зміщений перший залишок.

Далі ще раз зміщується вже один раз зміщений перший залишок на один розряд вліво і віднімається від нього дільник:

0. 00110000

+ 1. 01000000

1. 01110000 третій залишок

Третій залишок від’ємний, значить наступний, третій розряд частки дорівнює 0, С = 100ХХ. Тому знову відновлюємо залишок - повертаємо дільник третьому залишку,

1. 01110000

+ 0. 11000000

0. 00110000 двічі зміщений перший залишок

Зміщуємо двічі зміщений перший залишок на один розряд вліво і віднімаємо дільник:

0. 01100000

+1. 01000000

1. 10100000 четвертий залишок

Четвертий залишок знову від’ємний, переносу немає, тому С = 1000Х. Додаємо дільник до четвертого залишку, результат зсуваємо на один розряд вліво, а потім знову віднімаємо дільник:

0. 1100000 перший залишок після четвертого зміщення

+ 1. 0100000

0. 0000000 п'ятий залишок

Залишок додатний, значить С = 10001 = 1710. Ділене вичерпалося - це і є відповідь.

Наведемо ще один приклад у іншій формі запису.

1 1 0 0 1 0 0 | 1 0 1 0

Доповнювальний код дільника + 0 1 1 0 | 1 0 1 0

Є перенос 1 ← 0 0 1 0

0 1 0 1

Доповнювальний код дільника + 0 1 1 0

Переносу немає 0 ← 1 0 1 1 

+ 1 0 1 0  Повернення (відновлення) залишку

0 1 0 1 

1 0 1 0

+ 0 1 1 0

1 ← 0 0 0 0

0 0 0 0

+ 0 1 1 0

0 ← 0 1 1 0

Наступна перевірка покаже, що процесс ділення у нас зійшовся до нуля.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]