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

2. Порядок роботи:

  1. Розробити алгоритм і написати програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp. Числа подаються у форматі:

Знак порядку

Знак мантиси

Порядок

Мантиса

2 розряди

2 розряди

4 розряди

8 розрядів

У алгоритмі передбачити аналіз отриманого результату на:

  • переповнення розрядної сітки (порушення нормалізації вліво);

  • наявність порушення нормалізації вправо;

  • від'ємний результат

Передбачити відповідні заходи з корекції результату.

3. Вимоги до звіту.

Вимоги до звіту аналогічні вимогам до лабораторної роботи № 3.

Лабораторна робота № 7

Тема: Дослідження виконання арифметичних операцій множення і ділення у форматі з фіксованою комою.

Мета роботи:

1. Вивчити алгоритми виконання арифметичних операцій множення та ділення у обчислювальних иашинах;

2. Розробити алгоритми і програми множення і ділення довільних двійкових чисел у форматі з фіксованою комою в інструкціях навчального комп’ютера DeComp.

1. Теоретична частина

1.1. Ділення двійкових чисел без знаку

Ділення двійкових чисел – найбільш трудомістка і тривала за часом операція, що виконується у АЛП більшості комп’ютерів загального призначення. Хоча на перший погляд ділення не складніше, ніж множення, проте виникає ряд проблем, пов’язаних з процесом ділення, що вимагають додаткових кроків з додатковими витратами часу.

Ділення вручну – це процес спроб та помилок. Наприклад, якщо потрібно розділити 461010 на 7710, ми спочатку помічаємо, що 77 не „входить” у 46, тому пробуємо розділити 461 на 77. Можна припустити, що число 461 у шість разів більше дільника 77, але перевірка показує помилковість такого припущення:

4610 | 77

- 462 | 6

-1

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

1-ша перевірка, чи ділене більше ніж дільник; різниця 5 | 2

додатна, тому продовжуємо: -2 | 2,5

2-га перевірка, чи ділене більше ніж дільник; бачимо: різниця 3

від’ємна, тому відновлюємо залишок і у частку записуємо значення -2

1-го розряду, яке дорівнює 2, тому що відбулося дві позитивні перевірки; -1

+ 2

Множимо залишок на 1010 – основу системи числення 10

і продовжуємо перевірки як і раніше, але у частці - 2

треба поставити кому. 8

Таких позитивних перевірок буде 5, доки різниця стане = 0, - 2

тому у частку запишемо число 5. 6

В універсальних комп’ютерах, як правило, реалізується цей “шкільний” алгоритм ділення чисел. Простий алгоритм ділення полягає у тому, що дільник на кожному кроці віднімається із діленого (починаючи із старших розрядів) стільки разів, скільки це можливо для отримання найменшого додатного залишку. Тоді у наступний розряд частки записується цифра, яка дорівнює числу дільників, що містяться у діленому на даному кроці. Інакше кажучі, при ділені операцію віднімання повторюють до тих пір, доки зменшуване не стане менше дільника, що віднімається. Число цих повторів показує, скільки разів число, що віднімається (дільник), вкладається у зменшуване (ділене).

Висновок: значення розряду частки – це кількість віднімань діленого до отримання від’ємного залишку, який відновлюється шляхом додавання до нього дільника.

Та сама проблема виникає, коли комп’ютер пробує розділити одне число на інше. Але для двійкової системи числення є відмінність – дільник або вкладається у ділене - тоді у частку записуємо 1, або не вкладається - тоді у частку записуємо 0 і потрібно розглядати додатковий розряд у діленому. Це значно полегшує процедуру ділення.

Розглянемо попередній приклад, але числа будуть подані у двійковій системі числення:

1 0 1 | 1 0

- 1 0 | 1 0 , 1

+ 0 1

- 1 0

- 1

+ 1 0

0 1 0

- 1 0

0

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

Різниця = 0. Об’єднуємо 0 залишку із значенням наступного розряду дільника – це є 1 і продовжуємо перевірки.

Оскільки дільник (10) 0 разів вкладається у величину 01 (різниця від’ємна), записуємо 0 у наступний розряд частки і відновлюємо залишок, додаючи дільник.

До значення залишку 01 додаємо наступний розряд діленого

Через те, що цього розряду немає, додаємо до запису залишку 0 (отримаємо 010), а у частці ставимо кому, яка відділяє цілу частину частки від дробової. Остання перевірка дає 0 у залишку, тому процесс ділення припиняється.

На любому кроці ділення легко візуально визначити, чи дорівнює частка 1 або 0, але комп’ютер не володіє такою здатністю і повинен кожний раз виконувати пробне віднімання. Якщо після припущення про значення пробного розряду частки і віднімання дільника результат виявиться від’ємним, то поточне значення діленого повинно бути “відновлене”, або ж потрібно застосувати який-небудь інший метод ділення.

Окрім розглянутого, треба зауважити ще одну особливість виконання операції ділення у комп’ютері, незалежно від форми подання чисел і прийнятого алгоритму: перед початком операції необхідно виключити можливість ситуації ділення на 0. Інакше задача втрачає результат, тому що число “нескінченність” у арифметичних операціях використати не можливо. Більшість трансляторів ситуацію “Ділення на 0” вважають “фатальною помилкою” і видають відповідне повідомлення.

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

Звичайно у комп’ютерах операція ділення реалізується двома способами:

  • з нерухомим діленим і дільником, що зсувається вправо;

  • з нерухомим дільником і діленим, що зсувається вліво;

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

Розглянемо два основних алгоритми цілочисельного ділення

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