Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
22.02.2016
Размер:
137.79 Кб
Скачать

Вовна Р.В. Лабораторна робота №4 КМ-13

Лабораторна робота № 4 програмне моделювання машинних алгоритмів ділення чисел з фіксованою крапкою

Мета роботи: Розглянути машинні алгоритми виконання операції ділення над числами у форматі з фіксованою крапкою

Теоретичні відомості: Машинне ділення організовано за тією ж схемою, як й звичайне десяткове ділення.

Алгоритм полягає в тому, що дільник спочатку зсувається вліво до старшого розряду діленого, а далі на кожнім кроці з діленого віднімається дільник, помножений на цифру частки. При цьому цифра частки підбирається так, щоб при вирахуванні вийшло найменше ненегативне число. Далі залишок від вирахування приймається за ділене. У випадку двійкової системи числення чергова цифра частки виходить з порівняння діленого і дільника. Порівняння це виробляється шляхом вирахування дільника з діленого. Якщо дільник менше (різниця менше нуля), то цифра частки приймається рівної 1, інакше - 0. В другому випадку ділене після порівняння необхідно відновити, додавши до нього регістр дільника. Далі дільник зсувається вправо на 1 розряд і операція продовжується ще n раз. Усього ж операція порівняння проводиться (n+1) раз.

Машинний алгоритм цього методу ділення в застосуванні до двійкових чисел представлений нижче:

Ділення з відновленням залишку. Вихідні дані: ділене в регістрі діленого, дільник у регістрі дільника і нуль у регістрі частки.

  1. Зрушуємо дільник уліво доти, поки він не стане більше діленого (або поки не збіжаться їхні старші цифри), позначимо число таких зрушень n;

  2. Порівнюємо дільник і ділене. Операція порівняння проводиться за допомогою вирахування, результат заноситься в регістр діленого. Якщо при вирахуванні дільника з діленого отримали заєм (тобто ділене менше дільника), то всуваємо в регістр частки праворуч цифру нуль. Інакше заносимо одиницю і йдемо до пункту 4;

  3. Відновлюємо негативний залишок у регістрі діленого до стану перед порівнянням у пункті (2). Для цього додаємо значення дільника до регістра діленого (на кроці (2) при порівнянні ми віднімали);

  4. Зрушуємо дільник вправо на один розряд. Якщо не виконана (n+1) ітерація, то перейти до пункту 2.

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

Приклад ділення з відновленням залишку

Поділимо двійкове число 110102 на двійкове число 1012

Крок

Регістр

ділимого

Регістр

дільника

Регістр

частки

011010

000101

000000

Зсув дільника до співпадання старших цифр

011010

010100

000000

Порівняння

000110

010100

000001

Зсув дільника

000110

001010

000001

Порівняння

111100

001010

000010

Відновлення залишку

000110

001010

000010

Зсув дільника

000110

000101

000010

Порівняння

000001

001010

000101

Частка дорівнює 101, залишок 1.

У такий спосіб у регістрі частки сформується значення частки, а в регістрі діленого - значення залишку. Такий алгоритм ділення називається діленням з відновленням залишку і зрушенням дільника вправо. Існують і інші схеми ділення чисел з фіксованою крапкою.

Спробуємо оптимізувати алгоритм. Нехай Ai - залишок на i-тім кроці (після i-того порівняння), B - вихідний дільник. Розглянемо випадок відновлення залишку:

Ai+1 = Ai + B*2n-i - B*2n-i-1

де додавання відповідає відновленню залишку, вирахування - i+1-му порівнянню. Очевидно, що відновлення робити необов'язково:

Ai+1 = Ai + B*2n-i-1

Просто досить на наступному кроці замість операції вирахування при порівнянні застосувати додавання. Цей алгоритм одержав назву алгоритму ділення без відновлення залишків.

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

Приклад ділення без відновлення залишку

Поділимо двійкове число 110102 на двійкове число 1012

Крок

Регістр

ділимого

Регістр

дільника

Регістр

частки

011010

000101

0000000

Зсув дільника до співпадання старших цифр

011010

010100

0000000

Порівняння

000110

010100

000001

Зсув дільника

000110

001010

000001

Порівняння

111100

001010

000010

Зсув дільника

111100

000101

000010

Порівняння шляхом додавання

000001

001010

000101

Частка дорівнює 101, залишок 1.

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

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

  1. X>0, Y>0, Z=X/Y>0 (X – ділене, Y – дільник, Z – частка). В даному випадку виконання операції ділення нічим не відрізняється від ділення додаткових чисел в прямому коді.

  2. X<0, Y>0, Z=X/Y<0. Для отримання додаткового коду результату необхідно додати одиницю в n+1 розряд.

  3. X>0, Y<0, Z=X/Y<0. Для отримання додаткового коду результату необхідно додати одиницю в n+1 розряд.

  4. X<0, Y<0, Z=X/Y>0. На першому кроці алгоритму необхідно для формування вірного знаку частки необхідно із від’ємного діленого віднімати додатній дільник. Далі цей випадок зводиться до випадку №3. Всі цифри частки рівні знакам залишків.

Соседние файлы в папке печать кн лабы