Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
КУРСОВА РОБОТА (ЧАСТИНА 4)
з дисципліни
«Комп’ютерна логіка»
Завдання 4.1
Виконати порозрядні операції над двома 16-розрядними кодами:
(1ц1л)(2ц1л)(1ц2л)(2ц2л) and (1ц7л)(2ц7л)(1ц8л)(2ц8л) – операція І,
(1ц1л)(2ц1л)(1ц2л)(2ц2л) or (1ц7л)(2ц7л)(1ц8л)(2ц8л) – операція АБО,
(1ц1л)(2ц1л)(1ц2л)(2ц2л) xor (1ц7л)(2ц7л)(1ц8л)(2ц8л) – операція ВИКЛЮЧНЕ АБО.
Синтезувати в базисі Буля функціональні схеми пристроїв, які виконують дані операції, і навести значення сигналів на входах кожного елемента схеми.
Згідно вхідних даних (к у ц а л б і г) отримано наступні шістнадцяткові числа:
38 41 33 52 18 34 46 24.
Нехай (1ц1л)(2ц1л)(1ц2л)(2ц2л)=а;
(1ц7л)(2ц7л)(1ц8л)(2ц8л)=b.
а = 384116 = 0011 1000 0100 00012;
b = 462416 = 0100 0110 0010 01002.
Розряди
Аргументи
a&b
(and)
avb
(or)
a#b
(xor)
а
b
15
0
0
0
0
0
14
0
1
0
1
1
13
1
0
0
1
1
12
1
0
0
1
1
11
1
0
0
1
1
10
0
1
0
1
1
9
0
1
0
1
1
8
0
0
0
0
0
7
0
0
0
0
0
6
1
0
0
1
1
5
0
1
0
1
1
4
0
0
0
0
0
3
0
0
0
0
0
2
0
1
0
1
1
1
0
0
0
0
0
0
1
0
0
1
1
Таблиця істинності:
Аргументи
a&b
(and)
avb
(or)
a#b
(xor)
a
b
0
0
0
0
0
0
1
0
1
1
1
0
0
1
1
1
1
1
1
0
Схеми операцій в базисі Буля:
Завдання 4.2
Виконати операцію віднімання чисел у двійковому коді:
(1ц3л)(1ц1л)(2ц1л)-(1ц8л)(2ц8л),
(1ц8л)(2ц8л)-(1ц3л)(1ц1л)(2ц1л).
Від'ємний результат подати у прямому коді. Після виконання вказаних операцій навести у шістнадцятковому коді значення операндів і результату. Синтезувати на базі повних однорозрядних суматорів функціональну схему багаторозрядного суматора, який виконує дані операції, і навести значення сигналів на входах схеми і на виходах кожного однорозрядного суматора. Синтезувати в базисі Буля функціональну схему повного однорозрядного суматора, навести його таблицю істинності і значення сигналів на входах суматора і на виходах кожного його елемента для кожного розряду згаданого вище багаторозрядного суматора.
Згідно вхідних даних (к у ц а л б і г) отримано наступні шістнадцяткові числа:
38 41 33 52 18 34 46 24.
(1ц3л)(1ц1л)(2ц1л)=33816=0011 0011 10002;
(1ц8л)(2ц8л)=2416=0010 01002.
Виконаємо операцію: 338 – 24:
+338 + (-24);
0.0011 0011 1000 + 1.0000 0010 0100 - числа у прямому двійковому коді, крапка відділяє в даному випадку знак числа від значущих розрядів числа;
0.0011 0011 1000 + 1.1111 1101 1100 - числа у доповняльному двійковому коді;
0.0011 0011 1000
+
1.1111 1101 1100
0.0011 0001 0100 - результат додатній у двійковому коді.
0.314 - результат у прямому шістнадцятковому коді.
Відповідь: +314.
Виконаємо операцію: 24 – 338:
24+(-338);
0.0000 0010 0100 + 1.0011 0011 1000 - числа у прямому двійковому коді, крапка відділяє в даному випадку знак числа від значущих розрядів числа;
0.0000 0010 0100 + 1.1100 1100 1000 - числа у доповняльному двійковому коді;
0.0000 0010 0100
+
1.1100 1100 1000
1.1100 1110 1100 - результат від’ємний у двійковому доповняльному коді.
1.0011 0001 0100 - результат у прямому двійковому коді.
Відповідь: -314.
Схема суматора «338+(-24)»
Схема суматора «24+(-338)»
/
/
Таблиця істинності повного однорозрядного суматора:
Входи
Виходи
A
B
Ci
Co
S
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
1
0
1
1
1
0
1
1
0
1
0
0
1
З таблиці істинності видно, що
Co = /ABCi v A/BCi v AB/Ci v ABCi = BCi v ACi v AB;
S = /A/BCi v /AB/Ci v A/B/Ci v ABCi.
Функціональна схема повного однорозрядного сумматора:
Операція «338+(-24)»
A
B
Ci
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
/A
/B
/Ci
AB
ACi
BCi
/A/BCi
/AB/Ci
A/B/Ci
ABCi
Co
S
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
1
1
0
0
0
1
1
0
0
0
0
0
0
1
0
1
1
1
0
0
0
1
1
1
0
0
0
1
1
1
1
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
1
1
1
0
0
0
0
1
0
0
0
0
1
0
0
1
1
1
0
0
0
0
1
0
0
0
0
1
0
1
1
1
0
0
0
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
0
0
0
1
1
1
0
1
1
1
0
0
0
0
1
0
0
0
0
1
0
0
1
1
1
0
0
0
0
1
0
0
0
0
1
0
0
1
1
1
0
0
0
0
1
0
0
0
0
1
0
Операція «24+(-338)»
A
B
Ci
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
/A
/B
/Ci
AB
ACi
BCi
/A/BCi
/AB/Ci
A/B/Ci
ABCi
Co
S
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
0
1
0
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
0
1
0
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
Завдання 4.3
Виконати округлення 16-розрядних двійкових кодів із точністю до 1/2 одиниці
молодшого розряду, який залишається. Коди:
1(1ц4л)(2ц4л)(1ц5л)(2ц5л) - від'ємне число в доповняльному коді,
0(1ц4л)(2ц4л)(1ц5л)(2ц5л) - додатне число в доповняльному коді.
При першому округленні відкинути два молодших розряди. Наступні округлення провести послідовно через кожних два двійкових розряди. Результат чергового округлення – це початкові дані для наступного округлення.
Згідно вхідних даних (к у ц а л б і г) отримано наступні шістнадцяткові числа:
38 41 33 52 18 34 46 24.
1(1ц4л)(2ц4л)(1ц5л)(2ц5л) = 1 (521816) = 1 0101 0010 0001 10002
0(1ц4л)(2ц4л)(1ц5л)(2ц5л) = 0 (521816) = 0 0101 0010 0001 10002
Округлення додатнього числа 0 0101 0010 0001 1000:
0 0101 0010 0001 10(00)
+0 0000 0000 0000 00(10)
0 0101 0010 0001 10(10)
Розряди, які відкидаються, взято в дужки.
Результат першого округлення: 0 0101 0010 0001 10(00)
0 0101 0010 0001 (1000)
+0 0000 0000 0000 (1000)
0 0101 0010 0010 (1000)
Розряди, які відкидаються, взято в дужки.
Результат другого округлення: 0 0101 0010 0010 (0000)
0 0101 0010 00(01 0000)
+0 0000 0000 00(10 0000)
0 0101 0010 00(11 0000)
Розряди, які відкидаються, взято в дужки.
Результат третього округлення: 0 0101 0010 00(00 0000)
0 0101 0010 (0000 0000)
+0 0000 0000 (1000 0000)
0 0101 0010 (1000 0000)
Розряди, які відкидаються, взято в дужки.
Результат четвертого округлення: 0 0101 0010 (0000 0000)
0 0101 00(10 0000 0000)
+0 0000 00(10 0000 0000)
0 0101 01(00 0000 0000)
Розряди, які відкидаються, взято в дужки.
Результат п’ятого округлення: 0 0101 01(00 0000 0000)
0 0101 (0000 0000 0000)
+0 0000 (1000 0000 0000)
0 0101 (1000 0000 0000)
Розряди, які відкидаються, взято в дужки.
Результат шостого округлення: 0 0101 (0000 0000 0000)
0 01(01 0000 0000 0000)
+0 00(10 0000 0000 0000)
0 01(11 0000 0000 0000)
Розряди, які відкидаються, взято в дужки.
Результат сьомого округлення: 0 01(00 0000 0000 0000)
0 (0100 0000 0000 0000)
+0 (1000 0000 0000 0000)
0 (1100 0000 0000 0000)
Розряди, які відкидаються, взято в дужки.
Результат восьмого округлення: 0 (0000 0000 0000 0000)
Округлення від’ємного числа 1 0101 0010 0001 1000 в доповняльному коді:
1 0101 0010 0001 10(00)
+0 0000 0000 0000 00(01)
1 0101 0010 0001 10(01)
Розряди, які відкидаються, взято в дужки.
Результат першого округлення: 1 0101 0010 0001 10(00)
1 0101 0010 0001 (1000)
+0 0000 0000 0000 (0111)
1 0101 0010 0001 (1111)
Розряди, які відкидаються, взято в дужки.
Результат другого округлення: 1 0101 0010 0001 (0000)
1 0101 0010 00(01 0000)
+0 0000 0000 00(01 1111)
1 0101 0010 00(10 1111)
Розряди, які відкидаються, взято в дужки.
Результат третього округлення: 1 0101 0010 00(10 1111)
1 0101 0010 (0000 0000)
+0 0000 0000 (0111 1111)
1 0101 0010 (0111 1111)
Розряди, які відкидаються, взято в дужки.
Результат четвертого округлення: 1 0101 0010 (0111 1111)
1 0101 00(10 0000 0000)
+0 0000 00(01 1111 1111)
1 0101 01(11 1111 1111)
Розряди, які відкидаються, взято в дужки.
Результат п’ятого округлення: 1 0101 01(00 0000 0000)
1 0101 (0000 0000 0000)
+0 0000 (0111 1111 1111)
1 0101 (0111 1111 1111)
Розряди, які відкидаються, взято в дужки.
Результат шостого округлення: 1 0101 (0111 1111 1111)
1 01(01 0000 0000 0000)
+0 00(01 1111 1111 1111)
1 01(10 1111 1111 1111)
Розряди, які відкидаються, взято в дужки.
Результат сьомого округлення: 1 01(10 1111 1111 1111)
1 (0100 0000 0000 0000)
+0 (0111 1111 1111 1111)
1 (1011 1111 1111 1111)
Розряди, які відкидаються, взято в дужки.
Результат восьмого округлення: 1 (1011 1111 1111 1111)
Завдання 4.4
Виконати операцію віднімання чисел у двійково-десятковому коді (числа задані в шістнадцятковому коді):
(1ц1л)(2ц1л)-(1ц8л)(2ц8л),
(1ц8л)(2ц8л)-(1ц1л)(2ц1л).
Від'ємний результат подати у прямому двійково-десятковому коді.
Згідно вхідних даних (к у ц а л б і г) отримано наступні шістнадцяткові числа:
38 41 33 52 18 34 46 24.
(1ц1л)(2ц1л) = 3816 = 0011 10002 = 5610
(1ц8л)(2ц8л) = 2416 = 0010 01002 = 3610
Операція 56 - 36
36= 0011 0110 = B
56= 0101 0110
Двійковий обернений код B(дв.о.к.) = 1100 1001,
Двійковий доповняльний код B(дв.д.к.) = 1100 1010,
1001 1001
+1100 1010
0110 0011 – двійково-десятковий обернений код B(дв.-дес.о.к.)
0110 0100 – двійково-десятковий доповняльний код B(дв.-дес.д.к.).
Додавання доповняльного коду за правилами двійково-десяткової арифметики:
0101 0110
+ 0110 0100
1011 1010
+ 0000 0110 (корекція першої тетради)
1100 0000
+ 0110 0000 (корекція другої тетради)
1 0010 0000
Результат 0010 0000 = 20 перенос за межі розрядної сітки вказує на те, що результат
додатній, тобто, 20 - це його абсолютна величина.
Результат = 20.
Операція 36-56
36= 0011 0110
56= 0101 0110=B
Двійковий обернений код B(дв.о.к.) = 1010 1001,
Двійковий доповняльний код B(дв.д.к.) = 1010 1010,
1001 1001
+1010 1010
0100 0011 – двійково-десятковий обернений код B(дв.-дес.о.к.)
0100 0100 – двійково-десятковий доповняльний код B(дв.-дес.д.к.).
Додавання доповняльного коду за правилами двійково-десяткової арифметики:
0011 0110
+ 0100 0100
0111 1010
Результат 0111 1010, відсутність переносу за межі розрядної сітки вказує на те, що результат у доповняльному двійково-десятковому коді від'ємний, щоб отримати його абсолютну величину необхідно перевести результат з доповняльного коду в прямий. Алгоритм переведення такий же, як і для переведення з прямого коду в доповняльний:
інверсія двійкових розрядів 1000 0101;
додавання 1 молодшого розряду 1000 0110
доповнення до 99 +1001 1001
0001 1111
прямий двійково-десятковий код 0010 0000
Результат = -0010 0000= -20.
Завдання 4.5
Виконати операції множення в доповняльному коді двійкових чисел, поданих спочатку в прямому коді:
(+2ц1л) х (+2ц8л),
(-2ц1л) х (+2ц8л),
(+2ц1л) х (-2ц8л),
(-2ц1л) х (-2ц8л).
Попередньо всі числа перевести в доповняльний код. Навести алгоритм множення й таблицю, яка відображає зміни всіх операндів (множеного, множника, лічильника, проміжної суми, окремих розрядів та ознак), які беруть участь у множенні, після виконання кожного з операторів алгоритму. Синтезувати на базі повних однорозрядних суматорів і з використанням елементів базиса Буля функціональну схему матричного помножувача, який виконує операцію множення додатніх чисел (+2ц1л) х (+2ц8л), і навести значення сигналів на входах схеми і на виходах кожного елемента схеми.
Згідно вхідних даних (к у ц а л б і г) отримано наступні шістнадцяткові числа:
38 41 33 52 18 34 46 24.
(2ц1л) = 816 = 10002 (2ц8л) = 416 = 01002 (+8) x (+4) = (+32)
Алгоритм множення:
На алгоритмі множення введені такі позначеня:
Лч - лічильник;
n - кількість двійкових розрядів множника без знаку;
Мк - множник;
Ме - множене;
S - суматор, після виконання алгоритму в ньому буде знаходитися результат. Розрядність суматора без врахування знаку дорівнює n+m, де m - кількість розрядів множеного без врахування знаку (у прикладі n=m);
мол.р. - молодший розряд;
АЗП - арифметичний зсув праворуч;
ЛЗП - логічний зсув праворуч.
(+8) x (+4) = (+32) Mе = 0.1000 Мк = 0.0100
Лч
S
Мк
мол. р. Мк
Наступна операція
4
00.00000000
0.0100
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.0010
Лч = Лч - 1
3
00.00000000
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.0001
Лч = Лч - 1
2
00.00000000
+00.10000000
00.10000000
1
S = S + Ме
S = АЗП(S)
-> 00.01000000
Мк = ЛЗП(Мк)
00.01000000
0.0000
Лч = Лч - 1
1
00.01000000
0
S = АЗП(S)
-> 00.00100000
Мк = ЛЗП(Мк)
00.00100000
0.0000
Лч = Лч - 1
0
00.00100000
0.0000
0
кінець
00.001000002 (доп) = +1000002 (пр) = +3210
(+8) x (-4) = (-32) Mе = 0.1000 -Ме=1.1000 Мк = 1.1100
Лч
S
Мк
мол. р. Мк
Наступна операція
4
00.00000000
1,1100
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
0,1110
Лч = Лч - 1
3
00.00000000
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
0,0111
Лч = Лч - 1
2
00.00000000
+00.1000
00.10000000
1
S = S + Ме
S = АЗП(S)
-> 00.01000000
Мк = ЛЗП(Мк)
00.01000000
0.0011
Лч = Лч - 1
1
00.00000000
+00.1000
00.11000000
1
S = S + Ме
S = АЗП(S)
-> 00.01100000
Мк = ЛЗП(Мк)
00.01100000
0.0001
Лч = Лч - 1
0
00.01100000
+11.1000
11.11100000
1
S = S - Ме
11.11100000
кінець
11.111000002 (доп) = -1000002 (пр) = -3210
(-8) x (+4) = (-32) Mе = 1.1000 -Ме=0.1000 Мк = 0.0100
Лч
S
Мк
мол. р. Мк
Наступна операція
4
00.00000000
0,0100
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
0,0010
Лч = Лч - 1
3
00.00000000
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
0,0001
Лч = Лч - 1
2
00.00000000
+11.1000
11.10000000
1
S = S + Ме
S = АЗП(S)
-> 11.11000000
Мк = ЛЗП(Мк)
11.11000000
0.0000
Лч = Лч - 1
1
11.11000000
0
S = АЗП(S)
-> 11.11100000
Мк = ЛЗП(Мк)
11.11100000
0,0000
Лч = Лч - 1
0
11.11100000
кінець
11.111000002 (доп) = -1000002 (пр) = -3210
(-8) x (-4) = (+32) Mе = 1.1000 -Ме=0.1000 Мк = 1.1100
Лч
S
Мк
мол. р. Мк
Наступна операція
4
00.00000000
1,1100
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
1,1110
Лч = Лч - 1
3
00.00000000
0
S = АЗП(S)
-> 00.00000000
Мк = ЛЗП(Мк)
00.00000000
1,1111
Лч = Лч - 1
2
00.00000000
+11.1000
11.10000000
1
S = S + Ме
S = АЗП(S)
-> 11.11000000
Мк = ЛЗП(Мк)
11.11000000
1.1111
Лч = Лч - 1
1
11.11000000
+11.1000
11.01000000
1
S = S + Ме
S = АЗП(S)
-> 11.10100000
Мк = ЛЗП(Мк)
11.10100000
1,1111
Лч = Лч - 1
0
11.10100000
+00.1000
00.00100000
1
S = S – Ме
кінець
00.001000002 (доп) = +1000002 (пр) = +3210
Синтез на базі повних однорозрядних суматорів і з використанням елементів базиса Буля функціональної схеми матричного помножувача, який виконує операцію множення додатніх чисел 011 х 011:
A=0112=310
B=0112=310
A х B = 3*3=910=10012
Завдання 4.6
Виконати операцію множення в доповняльному коді методом Бута двійкових чисел, представлених спочатку в прямому коді:
(+2ц1л) х (+2ц8л),
(-2ц1л) х (+2ц8л),
(+2ц1л) х (-2ц8л),
(-2ц1л) х (-2ц8л).
Попередньо всі числа перевести в доповняльний код. Навести алгоритм множення й таблицю, яка відображає зміни всіх операндів (множеного, множника, лічильника, проміжної суми, окремих розрядів та ознак), які беруть участь у множенні, після виконання кожного з операторів алгоритму.
Згідно вхідних даних (к у ц а л б і г) отримано наступні шістнадцяткові числа:
38 41 33 52 18 34 46 24.
(2ц1л) = 816 =10002 (2ц8л) = 416 = 01002
Алгоритм множення:
На алгоритмі множення введені такі позначеня:
Лч - лічильник;
n - кількість двійковихрозрядів множника без знаку;
Мк - множник;
Ме -множене;
S - суматор, після виконання алгоритму в ньому буде знаходитися результат. Розрядність суматора без врахування знаку дорівнює n+m, де m - кількість розрядів множеного без врахування знаку (у прикладі n=m).
2 мол.р. - два молодших розряди;
АЗП - арифметичний зсув праворуч;
ЛЗП - логічний зсув праворуч.
(+8) x (+4) = (+32)
Mе = 0.1000 - Mе = 1.1000 Мк = 0.0100
Лч
S
Мк
мол. р. Мк
Наступна операція
5
00.00000000
0.0100(0)
00
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
Лч = Лч – 1
4
00.00000000
00
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.0010 (0)
Лч = Лч – 1
3
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.0001 (0)
10
S = S – Ме
00.00000000
+11.1000____
11.10000000
Лч = Лч – 1
2
S:=АЗП(S)
11.11000000
Мк=ЛЗП (Мк)
11.11000000
0.0000(1)
01
S = S + Мe
11.11000000
+00.1000____
00.01000000
Лч = Лч – 1
1
S:=АЗП(S)
00.001000000
Мк = ЛЗП(Мк)
00.001000000
0.0000(0)
00
Лч = Лч – 1
0
Кінець
00.001000002 (доп) = +1000002 (пр) = +3210
(+8) x (-4) = (-32)
Mе = 0.1000 - Mе = 1.1000 Мк = 1.1100
Лч
S
Мк
мол. р. Мк
Наступна операція
5
00.00000000
1.1100(0)
00
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
Лч = Лч – 1
4
00.00000000
00
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.1110 (0)
Лч = Лч – 1
3
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.0111 (0)
10
S = S – Ме
00.00000000
+11.1000____
11.10000000
Лч = Лч – 1
2
S:=АЗП(S)
11.11000000
Мк=ЛЗП (Мк)
11.11000000
0.0011(1)
11
Лч = Лч – 1
1
S:=АЗП(S)
11.11100000
Мк = ЛЗП(Мк)
11.11100000
0.0001(1)
11
Лч = Лч – 1
0
Кінець
11.111000002 (доп) = -1000002 (пр) = -3210
(-8) x (+4) = (-32)
Mе = 1.1000 - Mе = 0.1000 Мк = 0.0100
Лч
S
Мк
мол. р. Мк
Наступна операція
5
00.00000000
0.0100(0)
00
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
Лч = Лч – 1
4
00.00000000
00
S:=АЗП(S)
00.00000000
Мк = ЛЗП(Мк)
00.00000000
0.0010 (0)
Лч = Лч – 1
3
S:=АЗП(S)