Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 4
з дисципліни: “Дослідження інструкцій логічних операцій навчального комп’ютера – симулятора DeComp. Вивчення порядку
виконання операції додавання довільних чисел у
процесорі навчального комп’ютера.”
2008
Теоретичні відомості
Загальні відомості про логічні функції
Усі дії, які виконуються у комп’ютері, повинні бути закодовані попередньо у програмі. За допомогою кожної команди програми кодується одна операція комп’ютера, яка виконується над парою операндів.
Арифметична операція – операція, у якій операнди і результат сприймаються як числа. До них відносяться операції додавання і віднімання, з якими ми познайомилися у попередніх роботах, а також операції множення і ділення. Усі інші операції, наприклад, добування кореня квадратного, піднесення до степеня, дифференцювання та ін., реалізуються у комп’ютері на основі вказаних операцій.
Логічна операція – операція, що полягає у логічній обробці операндів, які приймають у ній участь. До них відносяться операції порівняння, визначення модуля, визначення ознак результатів арифметичних операцій та ін. До них часом відносять операції зсуву праворуч або ліворуч.
Точна, певна послідовність операцій або програма, яка потрібна для виконання певної задачі на комп’ютері, формується на основі математичної теорії, відомої як алгебра логіки. Створив алгебру логіки англійський математик Дж. Буль (1815 – 1864). Тому її називають також алгеброю Буля. Алгебра логіки отримала значний розвиток завдяки роботам таких вчених як Е. Пост, К. Шеннон, В. Глушков, С. Яблонський та ін. Основним поняттям алгебри логіки є висловлювання.
Під час вивчення звичайної алгебри розглядають залежності типу А = f(x1, x2, …xn), де x1, x2, …xn – аргументи, а А – функція. Аргументи і функція при цьому можуть набувати найрізноманітніших числових значень: додатних і від’ємних, цілих і дробових. У алгебрі логіки вивчають залежності аналогічного вигляду А = f(x1, x2, …xn), але такі, в яких аргументи і функція можуть набувати тільки двох значень: 1 і 0. Практичне використання таких функцій є формальним (математичним) описом логіки людського мислення в процесі виконання якоїсь задачі.
Вся діяльність людини так або інакше пов’язана з різними висловлюваннями. Будь-яке вимовлене твердження, зауваження є певним висловлюванням. У алгебрі логіки саме висловлювання є змінною (аргументом), яка може набувати одного з двох можливих значень (істина чи фальш, так чи ні, правдиво чи не правдиво) і над якою можна виконувати деякі дії. Подібно до аргументів у звичайній алгебрі, висловлювання позначають буквами якого-небудь алфавіту, наприклад, X, Y,Z або а, в, с. . .
За змістом висловлювання поділяють на прості і складні. Наприклад, прості: “вікно відчинене”, “у квартирі холодно”, “Микола вчиться в національному університеті “Львівська політехніка”, “Микола йде на стадіон”. З простих висловлювань за допомогою слів-зв’язок (сполучників) І, АБО, НЕ, ЯКЩО-ТО та ін. утворюють складні. Наприклад, речення: „Вікно відчинене і у квартирі холодно”, „Микола піде у парк або на стадіон”.
Будь-яке висловлювання може відповідати або не відповідати дійсності. У першому випадку його називають істинним (правдивим, true) і позначають як 1, а в інших – помилковим (хибним, false) і позначають як 0.
Особливістю виконання логічних операцій є порозрядність, тобто операції виконуються над кожною парою розрядів числа окремо і при цьому переповнення розрядної сітки не відбувається.
У обчислювальній техніці логічні операції використовуються надзвичайно широко.
Опис логічних інструкцій навчального комп’ютера
Група інструкцій, яку ми будемо досліджувати у даній роботі, присвячена логічним операціям: AND (логічне І), OR (логічне АБО), XOR (логічне Виключне-АБО) та NOT (логічне НЕ).
За винятком останньої логічної інструкції NOT, усі решта є адресними інструкціями, які виконують логічні операції над двома числами: значенням числа, що розміщене у акумуляторі та вмістом комірки пам’яті, на яку вказує 12-розрядна адреса у машинному коді інструкції, а також записують результат назад до акумулятора. Інструкція NOT є безадресною і вона заперечує (інвертує) усі розряди акумулятора із збереженням результату назад до акумулятора.
Перші 3 адресні інструкції мають такі 4-розрядні коди операцій:
AND – 0100,
OR – 0101 та
XOR – 0110.
Безадресна інструкція NOT має 6-розрядний код інструкції 0111 00.
Результати виконання логічних операцій зручно представити за допомогою такої таблиці:
Вхідні
набори
AND ( І )
*, &, (
OR (АБО)
+, |, (
XOR
Викл. АБО
(, #
Вхідні
набори
NOT (НЕ)
A = 0
B = 0
0
0
0
A = 0
1
A = 0
B = 1
0
1
1
A = 1
0
A = 1
B = 0
0
1
1
A = 1
B = 1
1
1
0
У поданій таблиці перші дві колонки містять 4 можливих варіанти комбінацій двох 1-розрядних чисел: 00, 01, 10 та 11. Наступні 3 стовпці зображують відповідні значення результатів виконання логічних функцій (операцій) І, АБО та Виключне-АБО над вхідними наборами. Останні два стовпці містять 2 варіанти одного 1-розрядного числа: 0 і 1, та відповідні значення функції (операції) НЕ. Зверніть увагу на позначення, які використовуються для різних логічних операцій:
І – *, & чи (;
АБО – +, | чи (;
Виключне-АБО – ( чи #;
НЕ – ~ чи риска над значенням логічного аргумента , наприклад чи .
Наприклад, 0 & 1 = 0; 1 ( 0 = 1; 1 ( 1 = 0 та ~1 = 0.
Логічну операцію І (*,&, () називають кон’юнкцією (від англ. – 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 – перевертання).
Розглянуті 4 логічні операції вважаються найосновнішими і найбільш розповсюдженими, хоча насправді для двох 1-розрядних вхідних чисел існує різноманітних логічних функцій.
Ще раз відзначимо надзвичайно важливу відмінність логічних операцій у порівнянні з арифметичними – порозрядність, тобто якщо взяти два N-розрядних числа, то логічна операція над ними буде виконуватись над парами відповідних розрядів цих чисел незалежно одна від одної: логічна операція над парою нульових розрядів дасть нульовий розряд результату, логічна операція над парою перших розрядів дасть 1-й розряд результату і т. д. Саме тому логічні операції не впливають на ознаку переносу C, хоча можуть змінювати ознаку нуля результату Z та ознаку знаку результату S.
Ввести у симулятор та дослідити у покроковому режимі програму, яка виконуватиме логічні операції І, АБО, Виключне-АБО та НЕ над двома числами. Коди чисел вибрати самостійно, використовуючи всі чотири тетради 16-ти розрядного формату. Виписати результати та значення прапорців ознак.
Досліджую операцію І, попередньо в 10-у і 11-у комірки заношу числа, над яким буде виконуватись операція: 1100 0011 1100 0011 і 0101 0101 0101 0101. Далі виконую наступну програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0000 1010
Load 10
Завантажує операнд 10-ї комірки
2
0000 0000 0001
0100 0000 0000 1011
AND 11
Виконує операцію І над операндами 10-ї і 11-ї комірок
3
0000 0000 0010
0111 1100 0000 0000
Halt
Завершує виконання програми
РА
РД
А
РІ
ЛАІ
РО
Крок 1
0000 0000 1010
1100 0011 1100 0011
1100 0011 1100 0011
0000 0000 0000 1010
0000 0000 0001
0
Крок 2
0000 0000 1011
0101 0101 0101 0101
0100 0001 01000 00001
0100 0000 0000 1011
0000 0000 0010
0
Крок 3
0000 0000 0010
0111 1100 0000 0000
0100 0001 0100 0001
0111 1100 0000 0000
0000 0000 0010
0
Після виконання операцій логічне І над двома числами я отримав результат 0100 0001 01000 00001, значення прапорців регістру ознак незмінились і є рівними 0.
Наступною розгляну інструкцію АБО, для цього використаю таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0000 1010
Load 10
Завантажує операнд 10-ї комірки
2
0000 0000 0001
0101 0000 0000 1011
OR 11
Виконує операцію АБО над операндами 10-ї і 11-ї комірок
3
0000 0000 0010
0111 1100 0000 0000
Halt
Завершує виконання програми
РА
РД
А
РІ
ЛАІ
РО
Крок 1
0000 0000 1010
1100 0011 1100 0011
1100 0011 1100 0011
0000 0000 0000 1010
0000 0000 0001
0
Крок 2
0000 0000 1011
0101 0101 0101 0101
1101 0111 1101 0111
0101 0000 0000 1011
0000 0000 0010
S
Крок 3
0000 0000 0010
0111 1100 0000 0000
1101 0111 1101 0111
0111 1100 0000 0000
0000 0000 0010
S
Після виконання операцій логічне АБО над двома числами я отримав результат 1101 0111 1101 0111, під час виконання програми регістр ознак S набув значення 1.
Розглядаю інструкцію Виключне-АБО, для цього виконую наступну програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0000 1010
Load 10
Завантажує операнд 10-ї комірки
2
0000 0000 0001
0110 0000 0000 1011
XOR 11
Виконує операцію АБО над операндами 10-ї і 11-ї комірок
3
0000 0000 0010
0111 1100 0000 0000
Halt
Завершує виконання програми
РА
РД
А
РІ
ЛАІ
РО
Крок 1
0000 0000 1010
1100 0011 1100 0011
1100 0011 1100 0011
0000 0000 0000 1010
0000 0000 0001
0
Крок 2
0000 0000 1011
0101 0101 0101 0101
1001 0110 1001 0110
0110 0000 0000 1011
0000 0000 0010
S
Крок 3
0000 0000 0010
0111 1100 0000 0000
1100 0011 1100 0011
0111 1100 0000 0000
0000 0000 0010
S
Після виконання операцій логічне виключне-АБО над двома числами я отримав результат 1001 0110 1001 0110, під час виконання програми регістр ознак S набув значення 1.
Розглядаю інструкцію NOT, для цього виконую таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0000 1010
Load 10
Завантажує операнд 10-ї комірки
2
0000 0000 0001
0111 0000 0000 0000
Not
Інвертує операнд 10-ї комірки
3
0000 0000 0010
0111 1100 0000 0000
Halt
Завершує виконання програми
РА
РД
А
РІ
ЛАІ
РО
Крок 1
0000 0000 1010
1100 0011 1100 0011
1100 0011 1100 0011
0000 0000 0000 1010
0000 0000 0001
0
Крок 2
0000 0000 0001
0111 0000 0000 0000
0011 1100 0011 1100
0111 0000 0000 0000
0000 0000 0010
0
Крок 3
0000 0000 0010
0111 1100 0000 0000
0011 1100 0011 1100
0111 1100 0000 0000
0000 0000 0010
0
Після виконання операцій НЕ логічне над вмістом Акумулятора, я отримав результат 0011 1100 0011 1100, значення прапорців регістру ознак незмінились і є рівними 0.
3). Дослідити в потактовому режимі інструкції AND I XOR - для непарних номерів із списку групи, OR I NOT - для парних номерів із списку групи.
Досліджую в потактовому режимі інструкцію OR, щоб дослідити цю інструкцію я заніс в Акумулятор число 1100 0011 1100 0011 і в 11-ту комірку число 0101 0101 0101 0101
№
Мнемонічний запис
Код, що обробляється
Коментар
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
РА ( РД
0101 0000 0000 1011
вибір коду інструкції з РА і занесення його до Регістра Даних
РД ( РІ
0101 0000 0000 1011
декодування інструкції у Регістрі Інструкцій
РІ ( РА
0000 0000 1011
вибір адреси першого числа
РА ( РД
0101 0101 0101 0101
Вибір числа з комірки 11
РД OR А( А
1101 0111 1101 0111
Логічна операція АБО над вмістом акумулятора і числом з комірки 11
А → РО.
S
Зміна значення регістру ознак S
ЛАІ ( ЛАІ +1
0000 0000 0001
Перехід до наступної інструкції
Досліджую в потактовому режимі інструкцію NOT, щоб дослідити цю інструкцію я заніс в Акумулятор число 1100 0011 1100 0011.
№
Мнемонічний запис
Код, що обробляється
Коментар
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
РА ( РД
0101 0000 0000 1011
вибір коду інструкції з РА і занесення його до Регістра Даних
РД ( РІ
0101 0000 0000 1011
декодування інструкції у Регістрі Інструкцій
NOT А( А
1101 0111 1101 0111
Логічна операція НЕ над вмістом акумулятора
ЛАІ ( ЛАІ +1
0000 0000 0001
Перехід до наступної інструкції
4). Розробити алгоритм і написати програму, що для довільного додатного числа "А" з комірки пам"яті "N" підраховує кількість пар "11" - для непарних номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи. Программа виконується у автоматичному режимі.
Для підрахування пар «00» попередньо в комірку з номером 40 записую число, в якому буду рахувати пари – 0011 0011 1011 1011, в комірку з номером 41 записую маску – 0000 0000 0000 0011, в 42-у лічильник пар (початкове значення – 0), в 43-у – 1 для зміни параметру циклу, і зміни лічильника, в 44-у – 16, лічильник циклу. Далі виконую таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0010 1000
Load 40
Виконує циклічний зсув вліво над операндом 40-ї комірки
2
0000 0000 0001
1111 1000 0000 0000
ROL
3
0000 0000 0010
0001 0000 0010 1000
Store 40
4
0000 0000 0011
0110 0000 0010 1001
XOR 41
Проводить операцію логічного множення над значенням акумулятора та операндом 41-ї комірки
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 0010 1010
Load 42
Додає до лічильника пар одиницю
10
0000 0000 1001
0010 0000 0010 1011
Add 43
11
0000 0000 1010
0001 0000 0010 1010
Store 42
12
0000 0000 1011
0000 0000 0010 1100
Load 44
Виконує зміну параметру циклу
13
0000 0000 1100
0011 0000 0010 1011
Sub 43
14
0000 0000 1101
0001 0000 0010 1100
Store 44
15
0000 0000 1110
1100 0000 0000 0000
JNZ 0
Виконує перевірку кінця циклу (керування циклом)
16
0000 0001 0001
0111 1100 0000 0000
Halt
Закінчити виконання програми
5). Розробити алгоритм і написати програму, у якій для довільного додатного числа А виконується інвертування пар "00" - для парних номерів із списку групи і інвертування пар "00" - для непарних номерів із списку групи. Програма виконується у автоматичному режимі.
Для інвертування пар «11» в 40-у комірку заношу те саме число, в 41-у – маску, в 42-у – обернену маску, 43-у – 1, а в 44-у – 17 і виконую таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0010 1000
Load 40
Виконує циклічний зсув вліво над операндом 40-ї комірки
2
0000 0000 0001
1111 1000 0000 0000
ROL
3
0000 0000 0010
0001 0000 0010 1000
Store 40
4
0000 0000 0011
0110 0000 0010 1001
XOR 41
Проводить операцію логічного множення над значенням акумулятора та операндом 41-ї комірки
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 0010 1000
Load 40
Інвертує знайдену пару «11» в операнді 40-ї комірки
10
0000 0000 1001
0110 0000 0010 1010
XOR 42
11
0000 0000 1010
0001 0000 0010 1000
Store 40
12
0000 0000 1011
0000 0000 0010 1100
Load 44
Виконує зміну параметру циклу
13
0000 0000 1100
0011 0000 0010 1011
Sub 43
14
0000 0000 1101
0001 0000 0010 1100
Store 44
15
0000 0000 1110
1100 0000 0000 0000
JNC 0
Виконує перевірку кінця циклу (керування циклом)
16
0000 0001 0001
0111 1100 0000 0000
Halt
Закінчити виконання програми
Висновки: Під час виконання цієї лабораторної роботи я вивчив призначення логічних операцій; навчився створювати і використовувати «маски» за допомогою логічних операцій. Також я вивчив алгоритми додавання довільних чисел у навчальному комп’ютері DeComp.
Важливим є те, що під час виконання програми комп'ютеру неможливо відрізнити де додатнє, а де від'ємне число, тому складаючи програму необхідно передбачити виконання алгоритму для представлення від'ємних чисел в доповняльному коді.