Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра СКС
Звіт
Про виконання лабораторної роботи №4
З дисципліни:
“Організація та функціонування комп’ютерів”
Мета:1. Вивчити призначення логічних операцій.
2. Навчитись створювати і використовувати "фільтри" за допомогою логічних операцій.
3. Вивчити правила кодування додатних і від’ємних двійкових чисел для здійснення арифметичних операцій у комп’ютерах;
4. Навчитися кодувати двійкові числа із знаком у інструкціях навчального комп’ютера – симулятора DeComp.
Теоретичні відомості
1.1. Загальні відомості про логічні функції
Арифметична операція – операція, у якій операнди і результат сприймаються як числа. До них відносяться операції додавання і віднімання, з якими ми познайомилися у попередніх роботах, а також операції множення і ділення. Усі інші операції, наприклад, добування кореня квадратного, піднесення до степеня, дифференцювання та ін., реалізуються у комп’ютері на основі вказаних операцій.
Логічна операція – операція, що полягає у логічній обробці операндів, які приймають у ній участь. До них відносяться операції порівняння, визначення модуля, визначення ознак результатів арифметичних операцій та ін. До них часом відносять операції зсуву праворуч або ліворуч.
Вся діяльність людини так або інакше пов’язана з різними висловлюваннями. Будь-яке вимовлене твердження, зауваження є певним висловлюванням. За змістом висловлювання поділяють на прості і складні
Будь-яке висловлювання може відповідати або не відповідати дійсності. У першому випадку його називають істинним (правдивим, true) і позначають як 1, а в інших – помилковим (хибним, false) і позначають як 0.
1.2. Подання від’ємних чисел у комп’ютерах
Для виконання операцій обробки інформації у комп’ютерах і системах збереження та передачі даних, її замінюють числами. Позначення різної інформації відповідними числами називають цифровим кодування, а послідовність цифр для позначення певної інформації - її кодом.
Кодуванню числової інформації у комп’ютерах приділяється особлива увага. Це викликано декількома причинами, одна з яких – наявність знаків у числах. Основна проблема полягає у тому, що центральним складовим елементом арифметично-логічного пристрою (АЛП) є суматор, який виконує лише порозрядне додавання двох кодів із врахуванням ваги кожного з розрядів та з організацією міжрозрядних переносів. Знак числа суматор не “розуміє”, його не розрізняє і сприймає знак числа як звичайний двійковий код.
На даний час прийнято, що мінус кодується як одиниця (1), а плюс – як нуль (0).
Для здійснення арифметичних операцій у комп’ютерах були розроблені спеціальні способи кодування і відповідні коди. Найбільш поширеними є прямий, обернений та доповняльний коди. Підкреслимо, що доповняльний та обернений коди використовуються тільки для подання від’ємних двійкових чисел. Додатні числа у цих кодах не міняють свого зображення і подаються як у прямому коді.
1.2.1. Прямий код
Він базується на природньому поданні чисел у вигляді їх абсолютного значення з кодом відповідного знаку: плюса (0) або мінуса (1) у старшому розряді.
Формула утворення прямого коду двійкового числа А = ± 0, а1а2а3…аn має вигляд
Таким чином, цифрові розряди числа у прямому коді залишаються незмінними, а у знаковій частині записується одиниця для від’ємного числа і нуль для додатного числа.
1.2.2. Обернений код
Обернений код від’ємного числа називають доповненням до 1. Тут так само присутній знаковий розряд (0 – це “+”, 1 – це “-”).
Формула утворення оберненого коду має вигляд
Аоб = (1.3.2)
Обернений код додатного числа повністю співпадає з відображенням числа у прямому коді.
Приклад 1.3.2. А = - 0,100110. Аоб = 10 + (– 0,100110) – 0,000001 = 1,011001.
Звідси витікає правило: щоб записати від’ємне число в оберненому коді, потрібно у знаковому розряді цього числа поставити одиницю, а в числових розрядах нулі замінити одиницями, а одиниці – нулями. Операція заміни нуля на одиницю і навпаки називається інвертуванням.
1.2.3. Доповняльний код
Для подання від’ємних чисел у двійковій системі числення частіше використовується система доповнення до двох. У ній також є знаковий розряд (0 це “ + ”, а 1 – це “-”). Доповнення виконується у два етапи. Спочатку кожна 1 міняється на 0, а кожний 0 – на 1 (інверсія). Потім до молодшого розряду отриманого результату додається 1. Наприклад, розглянемо перетворення вісьмирозрядного числа - 610 у форму з доповненням до двох:
000001102 = (+ 6)10
111110012 = (- 6 у системі з доповненням до 1)
111110102 = (- 6 у системі з доповненням до 2).
Формула утворення доповняльного коду двійкового числа має вигляд
Адоп =
Порівнюючи від’ємне число А з його доповняльним кодом Адоп, можна вивести наступне правило: щоб записати від’ємне число у доповняльному коді, потрібно у знаковому розряді цього числа поставити одиницю, а у всіх числових розрядах нулі замінити одиницями, а одиниці – нулями і до отриманого результату добавити одиницю до молодшого розряду
1.3.4. Модифіковані коди
Ці коди відрізняються від простих машинних кодів тим, що на відображення знака відводиться два розряди: плюс відображається двома нулями (00), а мінус - двома одиницями (11). З погляду побудови АЛП вони зручні для виявлення переповнення розрядної сітки, яке може виникнути при додаванні чисел. Значення 01 та 10 у знакових розрядах свідчать про переповнення розрядної сітки. Невизначеність знаку приводить до того, що результат у цьому випадку буде не коректний, тобто, втрачається.
У модифікованих кодах другий розряд ліворуч від коми визначає знак числа, а перший розряд служить для аналізу переповнення розрядної сітки при виконанні арифметичних операцій над числами.
Хід роботи
Завдання 1
Вивчити і записати у звіт призначення логічних операцій AND, OR, NOT I XOR.
За винятком останньої логічної інструкції NOT, усі решта є адресними інструкціями, які виконують логічні операції над двома числами: значенням числа, що розміщене у акумуляторі та вмістом комірки пам’яті, на яку вказує 12-розрядна адреса у машинному коді інструкції, а також записують результат назад до акумулятора. Інструкція NOT є безадресною і вона заперечує (інвертує) усі розряди акумулятора із збереженням результату назад до акумулятора.
Перші 3 адресні інструкції мають такі 4-розрядні коди операцій:
AND – 0100,
OR – 0101,
XOR – 0110.
Безадресна інструкція NOT має 6-розрядний код інструкції 0111 00.
Позначення, які використовуються для різних логічних операцій:
І – *, & чи ;
АБО – +, | чи ;
Виключне-АБО – чи #;
НЕ – ~ чи риска над значенням логічного аргумента , наприклад чи .
Логічну операцію І (*,&, ) називають кон’юнкцією (від англ. – conjuction – з’єднання) або логічним множенням. Дійсно, результат операції І можна отримати, якщо перемножувати вхідні 1-розрядні числа: 0 * 1 = 0 або 1 * 1 = 1. Також назва кон’юнкія (з’єднання) йде від визначення результатів логічної операції І: результат дорівнює 1 тільки у випадку, коли всі аргументи дорівнюють 1.
Логічна операція І (&) дозволяє примусово встановити в "0" (обнулити) потрібні розряди даного числа:
10101010 & 11110000 = 10100000
Логічна операція АБО (+, |, ) має назву диз’юнкція (від англ. – disjunction – роз’єднання) або логічне додавання. Диз’юнкція означає, що кожне з вхідних чисел незалежно виявляє своє значення: за визначенням результат логічної операції АБО дорівнює 1 лише тоді, коли хоча б одне (або всі) з вхідних аргументів дорівнюють 1. Правило логічного додавання тотожньо із арифметичним додаванням у 3-х випадках з 4-х: 1+1 1, хоча 1 | 1 = 1.
Логічна операція АБО ( | ) дозволяє примусово встановити в "1" потрібні розряди даного числа:
10101010 | 11110000 = 11111010
Наведені приклади практичного використання операцій І та АБО називаються створенням "маски" або фільтра.
Логічну операцію Виключне-АБО (, #) іноді ще називають сумою за модулем 2, або – додаванням за модулем 2. Дійсно, результат операції Виключне-АБО повністю співпадає з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел: 0 1 = 1 (0 + 1 = 1), хоча 1 1 = 0 (1 + 1 = 10). Виключність назви цієї логічної операції походить з її визначення: результат дорівнює 1, коли тільки одне з вхідних чисел дорівнює 1. При виконанні цієї операції над групою аргументів, результат дорівнює 1, якщо серед аргументів непарна кількість 1, якщо кількість 1 парна , то результат = 0.
Логічна операція НЕ є дуже проста: = 1, = 0, тобто - заміна вхідного значення на протилежне. Цю операцію ще називають запереченням або інвертуванням (від англ. inversion – перевертання).
Завдання 2
Ввести у симулятор та дослідити у покроковому режимі програму, яка буде виконувати логічні операції І, АБО, Виключне-АБО та НЕ над двома числами. Коди чисел вибрати згідно варіанту, що визначається у 1-й лабораторній роботі, використовуючи всі чотири тетради 16-ти розрядного формату. Наприклад, якщо задане число 1810 = 000100102 , воно записується у вигляді: 00010010 00010010. Виписати результати виконання програми та значення прапорців ознак.
Коди чисел вибрав згідно варіанту 22, що визначається у 1-й лабораторній роботі, використовуючи всі чотири тетради 16-ти розрядного формату. Отже число 4410 записав у вигляді 00101100 001011002, а число 1010 записав 00001010 000010102. У 10 комірку записав 4410,у 11 комірку записав 1010.
Дослідження логічної операції І
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0001
0100 0000 0000 1011
AND 11
Виконує операцію І над операндами 10-ї і 11-ї комірок
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0010 1100 0010 1100
0010 1100 0010 1100
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 1011
0000 1010 0000 1010
0000 1000 0000 1000
0100 0000 0000 1011
0000 0000 0010
000
3-й крок
0000 0000 0010
0111 1100 0000 0001
0000 1000 0000 1000
0001 0000 0000 1100
0000 0000 0010
000
Дослідження логічної операції АБО
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0001
0101 0000 0000 1011
OR 11
Виконує операцію АБО над операндами 10-ї і 11-ї комірок
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0010 1100 0010 1100
0010 1100 0010 1100
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 1011
0000 1010 0000 1010
0010 1110 0010 1110
0101 0000 0000 1011
0000 0000 0010
000
3-й крок
0000 0000 0010
0111 1100 0000 0000
0010 1110 0010 1110
0111 1100 0000 0000
0000 0000 0011
000
Дослідження логічної операції Виключне-АБО
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0001
0110 0000 0000 1011
XOR 11
Виконує операцію Виключне-АБО над операндами 10-ї і 11-ї комірок.
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0010 1100 0010 1100
0010 1100 0010 1100
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 1011
0000 1010 0000 1010
0010 0110 0010 0110
0110 0000 0000 1011
0000 0000 0010
000
3-й крок
0000 0000 0010
0111 1100 0111 1100
0010 0110 0010 0110
0111 1100 0000 0000
0000 0000 0010
000
Дослідження логічної операції НЕ
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0001
0111 0000 0000 1011
NOT 11
Виконує операцію НЕ над операндами 10-ї і 11-ї комірок
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0010 1100 0010 1100
0010 1100 0010 1100
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 0001
0111 0000 0000 1011
1101 0011 1101 0011
0111 0000 0000 1011
0000 0000 0010
010
3-й крок
0000 0000 0010
0111 1100 0000 0000
1101 0011 1101 0010
0111 1100 0000 0000
0000 0000 0010
010
Завдання 3
Дослідити у потактовому режимі інструкції AND I XOR - для непарних номерів із журналу списку групи, OR та NOT - для парних номерів із списку групи. Виписати результати виконання програми.
До 3-ї комірки – число 1010, а до акумулятора – 4410
• Інструкція OR
№
Мнемонічний запис
Код що обробляється
Коментар
1
ЛАІ→РА
0000 0000 0000
Вибір адреси 1-ої інструкції і занесення до РА
2
РА→РД
0101 0000 0000 0010
Вибір коду інструкції з РА і занесення до РД
3
РД→РІ
0101 0000 0000 0010
Декодування інструкції у РІ
4
РІ→РА
0000 0000 0000 0010
Вибір адреси 1-го операнда
5
РА→РД
0000 1010 0000 1010
Вибір коду 1-го операнда з пам’яті
6
РД+А→А
0010 1110 0010 1110
Виконання операції АБО
7
ZSC(A)→РО
000
Встановлення прапорців регістру ознак
8
ЛАІ +1→ЛАІ
0000 0000 0001
Підготовка адреси нової інструкції
• Інструкція NOT
№
Мнемонічний запис
Код що обробляється
Коментар
1
ЛАІ→РА
0000 0000 0000
Вибір адреси 1-ої інструкції і занесення до РА
2
РА→РД
0111 0000 0000 0010
Вибір коду інструкції з РА і занесення до РД
3
РД→РІ
0111 0000 0000 0010
Декодування інструкції у РІ
4
А+1→А
1101 0011 1101 0011
Виконання операції НЕ
5
ZSC(A)→РО
S
Встановлення прапорців ознак
6
ЛАІ +1→ЛАІ
0000 0000 0001
Підготовка адреси нової інструкції
Завдання 4
Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам’яті з адресою "N", підраховує кількість пар "11" - для непарних номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи.
Для підрахування пар «00» попередньо в комірку з номером 20 записую число А, в якому буду рахувати пари – 0011 0011 1011 10112, в комірку з номером 21 записую маску, в 22- лічильник пар (початкове значення – 0), в 23 – 1 для зміни параметру циклу, і зміни лічильника, в 24 – 16, лічильник циклу.
Схема алгоритму:
Далі виконую таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0001 0100
Load 20
Завантажує значенння 20-ої комірки
2
0000 0000 0001
1111 1000 0000 0000
ROL
Циклічний зсув вліво
3
0000 0000 0010
0001 0000 0001 0100
Store 20
Записує значення у 20-ту комірку
4
0000 0000 0011
0110 0000 0001 0101
XOR 21
Проводить операцію Виключне-Або над значенням акумулятора та операндом 21-ї комірки
5
0000 0000 0100
1111 1110 0000 0000
RCR
Циклічний зсув вправо через С
6
0000 0000 0101
1100 0000 0000 1011
JNC 11
Умовний перехід якщо С=0
7
0000 0000 0110
1111 1110 0000 0000
RCR
Циклічний зсув вправо через С
8
0000 0000 0111
1100 0000 0000 1011
JNC 11
Умовний перехід якщо С=0
9
0000 0000 1000
0000 0000 0001 0110
Load 22
Завантажує значення 22-ої комірки
10
0000 0000 1001
0010 0000 0010 0111
Add 23
Додає до 23-ої
11
0000 0000 1010
0001 0000 0001 0110
Store 22
Записує у 22-у
12
0000 0000 1011
0000 0000 0001 1000
Load 24
Завантажує значення 24-ої к омірки
13
0000 0000 1100
0011 0000 0001 0111
Sub 23
Віднімає 1
14
0000 0000 1101
0001 0000 0001 1000
Store 24
Зберігає у 24
15
0000 0000 1110
1100 0000 0000 0000
JNZ 0
Виконує перевірку кінця циклу (керування циклом)
16
0000 0001 0001
0111 1100 0000 0000
Halt
Закінчити виконання програми
В результаті одержую число 2.
Завдання 5
Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 4, виконується інвертування пар "11" - для парних номерів із списку групи і інвертування пар "00" - для непарних номерів із списку групи.
Для інвертування пар «11» в 40-у комірку заношу те саме число, в 41 – маску, в 42 – обернену маску, 43 – 1, а в 44 – 17 і виконую таку програму:
Схема алгоритму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0001 0100
Load 20
Виконує циклічний зсув вліво над операндом 20-ї комірки
2
0000 0000 0001
1111 1000 0000 0000
ROL
3
0000 0000 0010
0001 0000 0001 0100
Store 20
4
0000 0000 0011
0100 0000 0001 0101
AND 21
Проводить операцію логічного множення над значенням акумулятора та операндом 21-ї комірки
5
0000 0000 0100
1111 1110 0000 0000
RCR
Перевіряє наявність пари «11», при її відсутності виконання програми продовжується з 11-ї комірки
6
0000 0000 0101
1100 0000 0000 1011
JNC 11
7
0000 0000 0110
1111 1110 0000 0000
RCR
8
0000 0000 0111
1100 0000 0000 1011
JNC 11
9
0000 0000 1000
0000 0000 0001 0100
Load 20
Інвертує знайдену пару «11» в операнді 20-ї комірки
10
0000 0000 1001
0100 0000 0001 0110
AND 22
11
0000 0000 1010
0001 0000 0001 0100
Store 20
12
0000 0000 1011
0000 0000 0001 1000
Load 24
Виконує зміну параметру циклу
13
0000 0000 1100
0011 0000 0001 0111
Sub 23
14
0000 0000 1101
0001 0000 0001 1000
Store 24
15
0000 0000 1110
1100 0000 0000 0000
JNC 0
Виконує перевірку кінця циклу (керування циклом)
18
0000 0001 0001
0111 1000 0000 0000
Halt
Закінчити виконання програми
Після виконання програми одержу таке число – 0000 0010 0010 0000.
Завдання 6
Розробити алгоритм і написати програму додавання двох від’ємних 16-ти розрядних чисел. Операція виконується у доповняльному коді.
Схема алгоритму:
/
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0010 1000
Load 40
Перевірка чи число від’ємне
2
0000 0000 0001
1111 1100 0000 0000
RCL
3
0000 0000 0010
1100 0000 0000 1000
JNC 8
Якщо число не від’ємне то перейти на 8-у комірку
4
0000 0000 0011
0000 0000 0010 1000
Load 40
Подання числа у доповняльному коді
5
0000 0000 0100
0111 0000 0000 0000
NOT
6
0000 0000 0101
0101 0000 0010 1010
OR 42
7
0000 0000 0110
0010 0000 0010 1011
Add 43
8
0000 0000 0111
0001 0000 0000 0000
Store 40
9
0000 0000 1000
0000 0000 0010 1001
Load 41
Перевірка другого числа на від’ємність
10
0000 0000 1001
1111 1100 0000 0000
RCL
11
0000 0000 1010
1100 0000 0001 0000
JNC 16
Якщо друге число не від’ємне, то перейти на 16-у комірку
12
0000 0000 1011
0000 0000 0010 1001
Load 41
Подання другого числа у доповняльному коді
13
0000 0000 1100
0111 0000 0000 0000
NOT
14
0000 0000 1101
0101 0000 0010 1010
OR 42
15
0000 0000 1110
0010 0000 0010 1011
Add 43
16
0000 0000 1111
0001 0000 0010 1001
Store 41
17
0000 0001 0000
0000 0000 0010 1000
Load 40
Додавання чисел
18
0000 0001 0001
0010 0000 0010 1001
Add 41
19
0000 0001 0010
0111 1100 0000 0000
Halt
Зупинка виконання програми
Висновок:
Під час виконання лабораторної роботи №4 я вивчив призначення логічних операцій, навчився створювати і використовувати "фільтри" за допомогою логічних операцій, вивчив правила кодування додатних і від’ємних двійкових чисел для здійснення арифметичних операцій у комп’ютерах, навчився кодувати двійкові числа із знаком у інструкціях навчального симулятора DeComp.