- •Інститут менеджменту та економіки
- •Івано-Франківськ
- •Схвалено Вченою Радою Інституту менеджменту та економіки «Галицька академія» від 30 жовтня 2003р., протокол № 2 .
- •Передмова
- •1. Системи числення. Взаємнi переведення. Двiйково-десяткова система числення та ascii-коди
- •1.1.Загальнi вiдомостi пpо системи числення. Пpедставлення чисел в десятковiй та двiйковiй системах числення.
- •1.2.Взаємнi пеpетвоpення чисел в десятковiй та двiйковiй
- •1.3.Шiстнадцяткова система числення
- •1.4.Двійково-десятковi та ascii-коди
- •1.5.Завдання до гл.1.
- •2. Функції алгебри логіки. Способи завдання логiчних функцiй.
- •2.1.Табличний спосiб завдання логiчних функцiй
- •2.2.Логiчнi функцii однiєї та двох логiчних змiнних
- •2.3.Аналiтичний спосiб завдання логiчних функцiй
- •2.4.Завдання до гл.2
- •3.Закони алгебри логiки. Мiнiмiзацiя логiчних рiвнянь.
- •3.1.Закони алгебpи логiки
- •3.2.Пpиклад мiнiмiзацiї логiчних piвнянь на основi законiв
- •3.3. Пpедставлення логiчних рiвнянь каpтами Каpно
- •3.5.Завдання до гл.3
- •4.Базиси логiчних функцiй. Синтез та аналiз логiчних схем
- •4.1.Поняття базису логiчних функцiй. Пеpеведення логiчних piвнянь до piзних базисiв
- •4.2.Синтез логiчних схем
- •4.3.Аналiз логiчних схем
- •4.4.Завдання до гл.4
- •5. Особливостi виконання арифметичних операцiй додавання та вiднiмання.
- •5.1.Розpядна сiтка засобiв обчислювальної технiки
- •5.2.Беззнаковий фоpмат пpедставлення двiйкових чисел
- •5.3.Пpедставлення знакових чисел в прямих кодах
- •5.4.Пpедставлення знакових чисел в додаткових кодах
- •5.5.Завдання до гл.5.
- •6. Зсув. Алгоритми множення та дiлення
- •6.1. Множення, дiлення двiйкових чисел на 2. Операцiї логiчного та арифметичного зсуву
- •6.2. Множення, дiлення двiйкових чисел на довiльнi константи
- •6.3. Алгоритми множення двiйкових змiнних
- •6.4. Алгоритми дiлення двiйкових змiнних
- •6.5.Завдання до гл.6
- •7. Приклад рiшення завдання контрольної роботи
- •Рiшення завдання 5
- •Рiшення завдання 6
- •Комп’ютерна схемотехніка
- •Сергій Михайлович Іщеряков
- •76006, М.Івано-Франківськ, вул.Вовчинецька, 227, іме
6.3. Алгоритми множення двiйкових змiнних
Множення змiнної на константу вiдрiзняється вiд множення змiнної на змiнну тим, що для другого випадку невiдомим є склад обидвох множникiв. Розглянемо для прикладу множення двох восьмирозрядних двiйкових чисел 10101010 (назвемо його першим множником) та 11000001 (другий множник):
10101010
* 11000001
10101010 - додається
10101010 - не додається
10101010 - не додається
10101010 - не додається
10101010 - не додається
10101010 - не додається
10101010 - додається
10101010 - додається
1000000000101010
Фактично перемноження зводиться до додавання трьох значень першого множника, зсунутих на 0, 6 та 7 розрядiв влiво:
10101010
*11000001
10101010
+10101010
+10101010 .
1000000000101010
Вiдмiтимо, що другий множник мiстить одиничнi бiти саме в нульовому, шостому та сьомому розрядах. Таким чином, процедуру множення двох двiйкових змiнних можна представити як n (n – кiлькiсть бiтів другого множника) послiдовних тактiв утворення добутку шляхом додавання або недодавання зсунутих значень першого множника в залежностi вiд стану бiтiв другого множника згiдно наступного алгоритму:
– в кожному з n тактiв вiдбувається зсув влiво першого множника на один розряд, виключення складає самий перший такт, в якому перший множник вважається зсунутим на 0 розрядiв, тобто залишається незсунутим,
– в кожному з n тактiв вiдбувається аналiз одного бiту другого множника, починаючи з молодшого (нульового) бiту,
– якщо в i-му тактi ( i = 0, ..., n-1 ) i-тий бiт другого множника до-
рiвнює одиницi, вiдповiдне i-те зсунуте значення першого множника додається до значення добутку, яке на початку множення повинно бути скинутим в нуль; додавання i-го зсунутого значення першого множника до добутку не вiдбуватиметься, якщо i-тий бiт другого множника дорiвнює 0.
Неважко помiтити, що запропонований алгоритм повнiстю вiдповiдає правилу Горнера, за яким розкладається другий множник:
X * Y = X * 2 7 + X * 2 6 + X * 2 0 ,
де Y = 11000001 bin = 2 7 + 2 6 + 2 0 .
У вищенаведеному прикладі зсув першого множника відбувався влiво, а аналіз бітів другого множника починався iз молодших розрядiв.Той самий результат одержується у випадку зсуву першого множника вправо, якщо аналiз другого множника починати iз старших бітiв:
10101010
*11000001
10101010
+ 10101010
+ 10101010
1000000000101010
Зсунутий влiво або вправо перший множник називається частковим добутком ( ЧД ), а сума декiлькох зсунутих перших множників одержала назву суми часткових добуткiв ( СЧД ).
Процедура множення може бути реалізована і за рахунок зсуву суми часткових добутків вправо або влiво, також двома варіантами – шляхом аналiзу другого множника молодшими або старшими бітами вперед вiдповiдно. Нижче наведені по тактах всі чотири алгоритми множення двох беззнакових чисел : першого множника 10101010, що виступає як частковий добуток, та 11000001, біти якого аналізуються,починаючи з молодших або старших.
1. Алгоритм множення зсуванням влiво множника-часткового добутку аналiзом другого множника молодшими бітами вперед:
1 такт - 0000000010101010 - частковий добуток (ЧД) 1
+ 0000000000000000 - сума ЧД (СЧД) 0
0000000010101010 - СЧД 1
В першому тактi частковий добуток являє собою незсунуте значення першого множника. Додавання до суми часткових добуткiв вiдбувається, тому що молодший (нульовий) бiт другого множника дорiвнює одиницi.
2 такт - 0000000101010100 - ЧД2
0000000010101010 - СЧД1
додавання не відбувається, СЧД2 = СЧД1
В другому тактi частковий добуток являє собою зсунуте на один розряд влiво значення першого множника. Додавання до суми часткових добуткiв не вiдбувається, тому що перший бiт другого множника дорiвнює нулю.
3 ... 6 такти - додавання не відбувається,
СЧД6 = СЧД5 = СЧД4 = СЧД3 = СЧД2,
0001010101000000 - ЧД6
7 такт - 0010101010000000 - ЧД7
+ 0000000010101010 - СЧД6
0010101100101010 - СЧД7
8 такт - 0101010100000000 - ЧД8
+ 0010101100101010 - СЧД7
1000000000101010 - СЧД8
2. Алгоритм множення зсуванням вправо множника-часткового добутку аналiзом другого множника старшими бітами вперед:
1 такт - 0101010100000000 - ЧД1
+ 0000000000000000 - СЧД0
0101010100000000 - СЧД 1
В першому тактi частковий добуток являє собою значення першого множника, зсунуте на сiм розрядiв влiво. Додавання до суми часткових добуткiв вiдбувається, тому що старший (сьомий) бiт другого множника дорiвнює одиницi.
2 такт - 0010101010000000 - ЧД2
0101010100000000 - СЧД1
0111111110000000 - СЧД2
3 такт - 0001010101000000 - ЧД3
0111111110000000 - СЧД2
додавання не відбувається, СЧД3 = СЧД2
4 ... 7 такти - додавання не відбувається,
СЧД7 = СЧД6 = СЧД5 = СЧД4 = СЧД3,
0000000101010100 - ЧД7
8 такт - 0000000010101010 - ЧД8
+ 0111111110000000 - СЧД7
1000000000101010 - СЧД8
На рис. 9 наведені блок-схеми алгоритмів множення зсуванням влiво множника-часткового добутку B аналiзом другого множника A молодшими бітами вперед (9а), зсуванням вправо множника-часткового добутку B аналiзом другого множника A старшими бітами вперед (9б).
а) б)
Мал.9. Блок-схема алгоритму множення зсуванням влiво (а) та вправо (б) множника-часткового добутку B аналiзом другого множника A молодшими бітами (а) та старшими бітами (б) вперед
3. Алгоритм множення зсувом влiво суми часткових добутків аналiзом другого множника старшими бітами вперед:
1 такт - 0000000010101010 - ЧД1
+ 0000000000000000 - СЧД0
0000000010101010 - СЧД1
2 такт - 0000000010101010 - ЧД2
0000000101010100 - СЧД1*2
0000000111111110 - СЧД2
3 ... 7 такти - додавання не відбувається,
0011111111000000 - СЧД7 = СЧД2*64
8 такт - 0000000010101010 - ЧД8
+ 0111111110000000 - СЧД7*2
1000000000101010 - СЧД8
На мал. 10а наведена блок-схема алгоритму множення зсувом влiво суми SM часткових добутків аналiзом другого множника A старшими бітами вперед.
4. Алгоритм множення зсувом вправо суми часткових добутків аналiзом другого множника молодшими бітами вперед:
1 такт - 0101010100000000 - ЧД1
+ 0000000000000000 - СЧД0
0101010100000000 - СЧД 1
2 такт - 0101010100000000 - ЧД2
0010101010000000 - СЧД1/2
додавання не відбувається
3 ... 6 такти - додавання не відбувається,
0000001010101000 - СЧД6 = СЧД1/32
7 такт - 0101010100000000 - ЧД7
+ 0000000101010100 - СЧД6/2
0101011001010100 - СЧД7
8 такт - 0101010100000000 - ЧД8
+ 0010101100101010 - СЧД7/2
1000000000101010 - СЧД8
На мал. 10б наведена блок-схема алгоритму множення зсувом вправо суми SM часткових добутків аналiзом другого множника A молодшими бітами вперед.
а) б)
Мал.10. Блок-схема алгоритму множення зсуванням влiво (а) та вправо (б) суми SM часткових добутків аналiзом другого множника A старшими бітами (а) та молодшими бітами (б) вперед
Аналіз алгоритмів 1...4 показує, що найбільш простим є множення старшими байтами вперед зсуванням сум часткових добутків ( алгоритм 3 ), в якому для зберігання часткового добутку достатньо байтового регістру. Алгоритми із зсуванням множника вимагають двобайтового регістру для зберігання часткових добутків та містять операцію додавання двобайтових чисел, що ускладнює програму множення.
Для виконання множення знакових чисел необхідно:
визначити знак добутку (найбільш просто це робиться за допомогою логічної функції Виняткове ЧИ),
утворити абсолютні значення множників та перемножити їх із використанням будь-якого алгоритму,
утворити додатковий код результату.
Приклад. Потактно виконати множення беззнакових змiнних Х та У. Використати алгоритм множення зсувом множника Х (надалi – часткового добутку) у вiдповiдностi iз аналiзом змiнноi У молодшими бітами вперед. Шiстнадцятковi значення змiнних: X = A5B, У = 6D38.
Визначимо, що добуток 12-розрядноi змiнноi Х на 16-розрядну змiнну У матиме 28 розрядiв. Збiльшимо розряднiсть змiнноi Х до 28 нульовими бiтами i запишемо змiннi Х та У у двiйковiй формi:
Х = 0000 0000 0000 0000 1010 0101 1011
У = 0110 1101 0011 1000
Вiдмiтимо також, що в перших трьох тактах додавання не вiдбуватиметься - три молодшi бiти змiнноi У дорiвнюють нулю. Тому запишемо зразу стан четвертого такту, враховуючи, що змiнна Х вже буде тричi зсунута влiво:
Такт 4:
0000 0000 0000 0101 0010 1101 1000 - змiнна Х iз зсувом влiво
0000 0000 0000 0000 0000 0000 0000 - початкова сума часткових
добуткiв (CЧД0 = СЧД3)
0000 0000 0000 0101 0010 1101 1000 - СЧД пiсля четвертого
такту (СЧД4)
Такт 5:
0000 0000 0000 1010 0101 1011 0000 - змiнна Х iз зсувом влiво
0000 0000 0000 0101 0010 1101 1000 - СЧД4
0000 0000 0000 1111 1000 1000 1000 - СЧД5
Такт 6: 0000 0000 0001 0100 1011 0110 0000 - змiнна Х iз зсувом влiво
0000 0000 0000 1111 1000 1000 1000 - СЧД5
0000 0000 0010 0100 0011 1110 1000 - СЧД6
В тактах 7 та 8 додавання не вiдбуватиметься.
Такт 9: 0000 0000 1010 0101 1011 0000 0000 - змiнна Х iз зсувом влiво
0000 0000 0010 0100 0011 1110 1000 - СЧД8 = CЧД6
0000 0000 1100 1001 1110 1110 1000 - СЧД9
В тактi 10 додавання не вiдбуватиметься.
Такт 11:0000 0010 1001 0110 1100 0000 0000 -змiнна Х iз зсувом влiво
0000 0000 1100 1001 1110 1110 1000 - СЧД10 = СЧД9
0000 0001 0110 0000 1010 1110 1000 - СЧД11
В тактi 12 додавання не вiдбуватиметься.
Такт 13:0000 1010 0101 1011 0000 0000 0000 -змiнна Х iз зсувом влiво
0000 0001 0110 0000 1010 1110 1000 - СЧД12 = СЧД11
0000 1011 1011 1011 1010 1110 1000 - СЧД13
такт 14:0001 0100 1011 0110 0000 0000 0000 - змiнна Х iз зсувом влiво
0000 1011 1011 1011 1010 1110 1000 - СЧД13
0010 0000 0111 0001 1010 1110 1000 - СЧД14 - кiнцевий ре-
зультат.
Таким чином, Х * У = 2071AE8 hex.
