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

745 / Л.Р.№3 / Лабораторна робота #3

.doc
Скачиваний:
8
Добавлен:
22.02.2016
Размер:
157.7 Кб
Скачать

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

ПРОГРАМНЕ МОДЕЛЮВАННЯ МАШИННИХ АЛГОРИТМІВ МНОЖЕННЯ ЧИСЕЛ З ФІКСОВАНОЮ КРАПКОЮ

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

Теоретичні відомості: Розглянемо приклад множення двох чисел в двійковій системі:

10100111

11001010

101001110

10100111

10100111

10100111

1000001111000110

З цього прикладу видно, що для реалізації операції множення можуть застосовуватися схеми множення із молодших розрядів або із старших розрядів, а також із зсувом часткових сум або множника. Комбінація цих параметрів множення дають 4 алгоритми множення.

Нижче наведені приклади для різних схем множення. Для спрощення наведені восьми-розрядні операнди.

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

11001010

00000000

10100111

00000000

00000000

Початковий стан

01100101

0

00000000

10100111

00000000

00000000

Перший крок

00110010

1

00000001

01001110

00000001

01001110

Другий крок

00011001

0

00000010

10011100

00000001

01001110

Третій крок

00001100

1

00000101

00111000

00000110

10000110

Ч

  • 0000 0

етвертий крок

00000110

0

00001010

01110000

00000110

10000110

П’ятий крок

00000011

0

00010100

11100000

00000110

10000110

Шостий крок

00000001

1

00101001

11000000

00110000

01000110

Сьомий крок

00000000

1

01010011

10000000

10000011

11000110

Восьмий крок

Рис. 3.1 Приклад застосування схеми множення з молодших розрядів другого множника та зсувом ліворуч першого множника

На цій схемі перший рядок відповідає другому множнику, який зсувається праворуч на один розряд. Другий рядок відповідає першому множнику, який зсувається ліворуч. В третьому рядку дається часткова сума. Якщо черговий висунутий розряд другого множника – 0, то часткова сума не змінюється, якщо 1, то до часткової суми додається зсунутий другий множник.

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

11001010

10100111

00000000

00000000

00000000

Початковий стан

1

10010100

01010011

10000000

01010011

10000000

Перший крок

1

00101000

00101001

11000000

01111101

01000000

Другий крок

0

01010000

00010100

11100000

01111101

01000000

Третій крок

0

10100000

00001010

01110000

01111101

01000000

Четвертий крок

1

01000000

00000101

00111000

10000010

01111000

П’ятий крок

0

10000000

00000010

10011100

10000010

01111000

Шостий крок

1

00000000

00000001

01001110

10000011

11000110

Сьомий крок

0

00000000

00000000

10100111

10000011

11000110

Восьмий крок

Рис. 3.2 Приклад застосування схеми множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд

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

3. Множення з молодших розрядів другого множника із зсувом часткових сум праворуч. Перший множник подається в кожному кроці другим рядком у положенні, як при множенні на старшу цифру другого множника. Другий множник подано в першому рядку. На кожному кроці при його зсуві праворуч показується чергова двійкова цифра. Часткова сума у третьому рядку перед виконанням попередньо зсувається праворуч на один розряд. На першому кроці праворуч зсувається початкове нульове значення цієї суми.

11001010

01010011

10000000

00000000

00000000

Початковий стан

01100101

0

01010011

10000000

00000000

00000000

Перший крок

00110010

1

01010011

10000000

01010011

10000000

Другий крок

00011001

0

01010011

10000000

00101001

11000000

Третій крок

00001100

1

01010011

10000000

01101000

01100000

Четвертий крок

00000110

0

01010011

10000000

00110100

00110000

П’ятий крок

00000011

0

01010011

10000000

00011010

00011000

Шостий крок

00000001

1

01010011

10000000

01100000

10001100

Сьомий крок

00000001

1

01010011

10000000

10000011

11000110

Восьмий крок

Рис. 3.3 Приклад застосування схеми множення з молодших розрядів другого множника із зсувом часткових сум праворуч

4. Множення із старших розрядів другого множника із зсувом часткової суми ліворуч. За цим алгоритмом на кожному кроці здійснюється зсув множника на один розряд ліворуч та додавання до загальної суми, якщо чергова висунута двійкова цифра – 1, інакше нічого не додається. Часткова сума , що подана третім рядком зсувається на кожному кроці на один розряд ліворуч. Перший раз зсувається нульове значення.

11001010

00000000

10100111

00000000

00000000

Початковий стан

1

10010100

00000000

10100111

00000000

10100111

Перший крок

1

00101000

00000000

10100111

00000001

11110101

Другий крок

0

01010000

00000000

10100111

00000011

11101010

Третій крок

0

10100000

00000000

10100111

00000111

11010100

Четвертий крок

1

01000000

00000000

10100111

00010000

01001111

П’ятий крок

0

10000000

00000000

10100111

00100000

10011110

Шостий крок

1

00000000

00000000

10100111

01000001

11100011

Сьомий крок

0

00000000

00000000

10100111

10000011

11000110

Восьмий крок

Рис. 3.4 Приклад застосування схеми множення з молодших розрядів другого множника із зсувом часткових сум ліворуч

Як бачимо з наведених на рисунках прикладів, всі перелічені алгоритми дають однаковий результат.

Окремим зауваженням можна вказати те, що при розрядності операндів n, розрядність результату є 2n.

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

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

  1. Перший операнд (X) і другий операнд (Y) більші від нуля. В такому випадку множення відбувається звичайним чином за однією з схем.

  2. X > 0, Y < 0, в такому випадку до псевдодобутку потрібно додати додатковий код числа -2X.

  3. X < 0, Y > 0, в такому випадку до псевдодобутку потрібно додати додатковий код числа -2Y.

  4. X < 0, Y < 0, в такому випадку до псевдодобутку потрібно додати додатковий код числа 2(|X| + |Y|).

Завдання на виконання лабораторної роботи.

  1. Обрати свій номер варіанта згідно з останньою цифрою у номері залікової книжки (цифра „0” відповідає десятому варіантові).

  2. Створити блок-схему алгоритму машинного множення чисел з фіксованою крапкою згідно варіанту.

  3. Проаналізувати текст паскаль-програми у файлі lab3_var_”N”.pas (де „N” – номер варіанту) і визначити її призначення.

  4. Скомпілювати програму та запустити на виконання.

  5. Підставити власні вхідні значення та проаналізувати результати роботи програми.

  6. Оформити звіт та подати його викладачу разом з результатами виконання роботи.

Варіанти для виконання лабораторної роботи.

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

  2. Алгоритм множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд. Множники подаються у 8-ми розрядній сітці.

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

  4. Множення із старших розрядів другого множника із зсувом часткової суми ліворуч. Множники подаються у 8-ми розрядній сітці.

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

  6. Алгоритм множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд. Множники подаються у 16-ти розрядній сітці.

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

  8. Множення із старших розрядів другого множника із зсувом часткової суми ліворуч. Множники подаються у 16-ти розрядній сітці.

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

  10. Алгоритм множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд. Множники подаються у 32-ох розрядній сітці.

Соседние файлы в папке Л.Р.№3