
Лабораторна робота № 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
Ч
00
етвертий крок
00
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 знакових розрядів операндів множення.
Множення чисел з фіксованою крапкою у додатковому коді має свої особливості оскільки в даному випадку знакові розряди обробляються разом з числовими. Результат множення за будь-якою з вищеописаних схем буде не відповідати додатковому коду добутку, тому його будемо вважати псевдодобутком. Для отримання справжнього добутку потрібно виконати корекцію псевдодобутку. Маємо чотири варіанти множення чисел в додатковому коді:
-
Перший операнд (X) і другий операнд (Y) більші від нуля. В такому випадку множення відбувається звичайним чином за однією з схем.
-
X > 0, Y < 0, в такому випадку до псевдодобутку потрібно додати додатковий код числа -2X.
-
X < 0, Y > 0, в такому випадку до псевдодобутку потрібно додати додатковий код числа -2Y.
-
X < 0, Y < 0, в такому випадку до псевдодобутку потрібно додати додатковий код числа 2(|X| + |Y|).
Завдання на виконання лабораторної роботи.
-
Обрати свій номер варіанта згідно з останньою цифрою у номері залікової книжки (цифра „0” відповідає десятому варіантові).
-
Створити блок-схему алгоритму машинного множення чисел з фіксованою крапкою згідно варіанту.
-
Проаналізувати текст паскаль-програми у файлі lab3_var_”N”.pas (де „N” – номер варіанту) і визначити її призначення.
-
Скомпілювати програму та запустити на виконання.
-
Підставити власні вхідні значення та проаналізувати результати роботи програми.
-
Оформити звіт та подати його викладачу разом з результатами виконання роботи.
Варіанти для виконання лабораторної роботи.
-
Множення з молодших розрядів другого множника та зсувом ліворуч першого множника. Множники подаються у 8-ми розрядній сітці.
-
Алгоритм множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд. Множники подаються у 8-ми розрядній сітці.
-
Множення з молодших розрядів другого множника із зсувом часткових сум праворуч. Множники подаються у 8-ми розрядній сітці.
-
Множення із старших розрядів другого множника із зсувом часткової суми ліворуч. Множники подаються у 8-ми розрядній сітці.
-
Множення з молодших розрядів другого множника та зсувом ліворуч першого множника. Множники подаються у 16-ти розрядній сітці.
-
Алгоритм множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд. Множники подаються у 16-ти розрядній сітці.
-
Множення з молодших розрядів другого множника із зсувом часткових сум праворуч. Множники подаються у 16-ти розрядній сітці.
-
Множення із старших розрядів другого множника із зсувом часткової суми ліворуч. Множники подаються у 16-ти розрядній сітці.
-
Множення з молодших розрядів другого множника та зсувом ліворуч першого множника. Множники подаються у 32-ох розрядній сітці.
-
Алгоритм множення із старших розрядів другого множника та зсувом першого множника праворуч при кожному кроці на один розряд. Множники подаються у 32-ох розрядній сітці.