Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра СКС
Звіт
з лабораторної роботи № 4
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: « Дослідження інструкцій логічних операцій і виконання арифметичних операцій навчального комп’ютера – симулятора DeComp.»
Лабораторна робота № 4
Тема: Дослідження інструкцій логічних операцій і виконання арифметичних операцій
навчального комп’ютера – симулятора DeComp.
Мета роботи: 1. Вивчити призначення логічних операцій.
2. Навчитись створювати і використовувати "фільтри" за допомогою
логічних операцій.
3. Вивчити правила кодування додатних і від’ємних двійкових чисел для
здійснення арифметичних операцій у комп’ютерах;
4. Навчитися кодувати двійкові числа із знаком у інструкціях навчального
комп’ютера – симулятора DeComp.
1. Теоретичні відомості
1.1. Загальні відомості про логічні функції
Усі дії, які виконуються у комп’ютері, повинні бути закодовані попередньо у програмі. За допомогою кожної команди програми кодується одна операція комп’ютера, яка виконується над парою операндів.
Арифметична операція – операція, у якій операнди і результат сприймаються як числа. До них відносяться операції додавання і віднімання, з якими ми познайомилися у попередніх роботах, а також операції множення і ділення. Усі інші операції, наприклад, добування кореня квадратного, піднесення до степеня, дифференцювання та ін., реалізуються у комп’ютері на основі вказаних операцій.
Логічна операція – операція, що полягає у логічній обробці операндів, які приймають у ній участь. До них відносяться операції порівняння, визначення модуля, визначення ознак результатів арифметичних операцій та ін. До них часом відносять операції зсуву праворуч або ліворуч.
Точна, певна послідовність операцій або програма, яка потрібна для виконання певної задачі на комп’ютері, формується на основі математичної теорії, відомої як алгебра логіки. Створив алгебру логіки англійський математик Дж. Буль (1815 – 1864). Тому її називають також алгеброю Буля. Алгебра логіки отримала значний розвиток завдяки роботам таких вчених як Е. Пост, К. Шеннон, В. Глушков, С. Яблонський та ін. Основним поняттям алгебри логіки є висловлювання.
Під час вивчення звичайної алгебри розглядають залежності типу А = f(x1, x2, …xn), де x1, x2, …xn – аргументи, а А – функція. Аргументи і функція при цьому можуть набувати найрізноманітніших числових значень: додатних і від’ємних, цілих і дробових. У алгебрі логіки вивчають залежності аналогічного вигляду А = f(x1, x2, …xn), але такі, в яких аргументи і функція можуть набувати тільки двох значень: 1 і 0. Практичне використання таких функцій є формальним (математичним) описом логіки людського мислення в процесі виконання якоїсь задачі.
Вся діяльність людини так або інакше пов’язана з різними висловлюваннями. Будь-яке вимовлене твердження, зауваження є певним висловлюванням. У алгебрі логіки саме висловлювання є змінною (аргументом), яка може набувати одного з двох можливих значень (істина чи фальш, так чи ні, правдиво чи не правдиво) і над якою можна виконувати деякі дії. Подібно до аргументів у звичайній алгебрі, висловлювання позначають буквами якого-небудь алфавіту, наприклад, X, Y,Z або а, в, с. . .
За змістом висловлювання поділяють на прості і складні. Наприклад, прості: “вікно відчинене”, “у квартирі холодно”, “Микола вчиться в національному університеті “Львівська політехніка”, “Микола йде на стадіон”. З простих висловлювань за допомогою слів-зв’язок (сполучників) І, АБО, НЕ, ЯКЩО-ТО та ін. утворюють складні. Наприклад, речення: „Вікно відчинене і у квартирі холодно”, „Микола піде у парк або на стадіон”.
Будь-яке висловлювання може відповідати або не відповідати дійсності. У першому випадку його називають істинним (правдивим, true) і позначають як 1, а в інших – помилковим (хибним, false) і позначають як 0.
Особливістю виконання логічних операцій є порозрядність, тобто операції виконуються над кожною парою розрядів числа окремо і при цьому переповнення розрядної сітки не відбувається.
У обчислювальній техніці логічні операції використовуються надзвичайно широко.
2. Хід роботи:
Вивчити і записати у звіт призначення логічних операцій AND, OR, NOT I XOR.
Інструкція NOT інвертує усі розряди акумулятора із збереженням результату назад до акумулятора – 0 замінює 1 і навпаки. Логічну операцію AND називають кон’юнкцією або логічним множенням. Результат виконання операції буде рівний «1» коли дві біта будуть рівні 1, у решти випадках «0». Логічна операція OR має назву диз’юнкція або логічне додавання – результат виконання буде рівний «1» коли один з бітів, над якими виконується операція рівний 1. Логічну операцію XOR ще називають сумою за модулем 2, або – додаванням за модулем 2. Результат операції повністю співпадає з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел.
Ввести у симулятор та дослідити у покроковому режимі програму, яка буде виконувати логічні операції І, АБО, Виключне-АБО та НЕ над двома числами. Коди чисел вибрати згідно варіанту, що визначається у 1-й лабораторній роботі, використовуючи всі чотири тетради 16-ти розрядного формату. Наприклад, якщо задане число 1810 = 000100102 , воно записується у вигляді: 00010010 00010010. Виписати результати виконання програми та значення прапорців ознак.
№
№ комірки пам’яті у двійковому коді
Код інструкції
(двійковий)
Мнемонічний запис інструкції
Коментар до кожної
інструкції
0
0000 0000 0000
0000 0000 0001 0000
LOAD 16
Завантаження А
1
0000 0000 0001
0100 0000 0001 0001
AND 17
2
0000 0000 0010
0001 0000 0001 0010
STORE 18
Збереження результату
3
0000 0000 0011
0000 0000 0001 0000
LOAD 16
Завантаження А
4
0000 0000 0100
0101 0000 0001 0001
OR 17
5
0000 0000 0101
0001 0000 0001 0011
STORE 19
Збереження результату
6
0000 0000 0110
0000 0000 0001 0000
LOAD 16
Завантаження А
7
0000 0000 0111
0110 0000 0001 0001
XOR 17
8
0000 0000 1000
0001 0000 0001 0100
STORE 20
Збереження результату
9
0000 0000 1001
0000 0000 0001 0000
LOAD 16
Завантаження А
10
0000 0000 1010
0111 0000 0000 0000
NOT
Заперечення
11
0000 0000 1011
0001 0000 0001 0101
STORE 21
Збереження результату
12
0000 0000 1100
0000 0000 0001 0001
LOAD 17
Завантаження Б
13
0000 0000 1101
0111 0000 0000 0000
NOT
Заперечення
14
0000 0000 1110
0001 0000 0001 0110
STORE 22
Збереження результату
15
0000 0000 1111
0111 1100 0000 000
HALT
СТОП
16
0000 0001 0000
0001 0101 0001 0101
Число А
17
0000 0001 0001
0010 0101 0010 0101
Число Б
18
0000 0001 0010
0011 1010 0011 1010
Результат
19
0000 0001 0011
0011 0101 0011 0101
Результат
20
0000 0001 0100
0011 0000 0011 0000
Результат
21
0000 0001 0101
1110 1010 1110 1010
Результат
22
0000 0001 0110
1101 1010 1101 1010
Результат
№
РА
РД
А
РІ
ЛАІ
РО
1
0000 0001 0000
0001 0101 0001 0101
0001 0101 0001 0101
0000 0000 0001 000
0000 0000 0001
000
2
0000 0001 0001
0010 0101 0010 0101
0011 1010 0011 1010
0010 0000 0001 0001
0000 0000 0010
000
3
0000 0001 0010
0011 1010 0011 1010
0011 1010 0011 1010
0001 0000 0001 0010
0000 000 0011
000
4
0000 0001 0000
00010101 0001 0101
0001 0101 0001 0101
0000 0000 0001 0000
0000 0000 0100
000
5
0000 0001 0001
0010 0101 0010 0101
0011 0101 0011 0101
0101 0000 0001 0001
0000 0000 0101
000
6
0000 0001 0011
0011 0101 0011 0101
0011 0101 0011 0101
0001 0000 0001 0011
0000 0000 0110
000
7
0000 0001 0000
0001 0101 0001 0101
0001 0101 0001 0101
0000 0000 0001 0000
0000 0000 0111
000
8
0000 0001 0001
0010 0101 0010 0101
0011 0000 0010 0000
0110 0000 0001 0001
0000 0000 1000
000
9
0000 0001 0100
0011 0000 0011 0000
0011 0000 0011 0000
0001 0000 0001 0100
0000 0000 1001
000
10
0000 0001 0000
0001 0101 0001 0101
0001 0101 0001 0101
0000 0000 0001 0000
0000 0000 1010
0000
11
0000 0000 1010
0111 0000 0000 0000
1110 1010 1110 1010
0111 0000 0000 0000
0000 0000 1011
010
12
0000 0001 0101
1110 1010 1110 1010
1110 1010 1110 1010
0001 000 0001 0101
0000 0000 1100
010
13
0000 0001 0001
0010 0101 0010 0101
0010 0101 0010 0101
000 0000 0001 0001
0000 0000 1101
010
14
0000 0000 1101
0111 0000 0000 0000
1101 1010 1101 1010
0111 0000 0000 0000
0000 0000 1110
010
15
0000 0001 0110
1101 1010 1101 1010
1101 1010 1101 1010
0001 0000 0001 0110
0000 0000 1111
010
16
0000 0000 1111
0111 1100 0000 0000
1101 1010 1101 1010
0111 1100 0000 0000
0000 0000 1111
010
Дослідити у потактовому режимі інструкції AND I XOR - для непарних номерів із журналу списку групи, OR та NOT - для парних номерів із списку групи. Виписати результати виконання програми.
Інструкція І – AND (0100 aaaa aaaa aaaa) – здійснює логічне множення числа яке знаходиться в акумуляторі на число за адресою аааа аааа аааа. Результат виконання операції зберігається в акумуляторі.
До акумулятора заношу число 0010 0101 0010 0101, ЛАІ встановлюю 0000 0000 0000.
№
№ комірки пам’яті у двійковому коді
Код інструкції
(двійковий)
Мнемонічний запис інструкції
Коментар до кожної
інструкції
1
0000 0000 0000
0100 0000 0000 0001
AND
Логічне додавання
2
0000 0000 0001
0001 0101 0001 0101
Число
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ(РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА(РД
0100 0000 0000 0001
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД(РІ
0100 0000 0000 0001
декодування інструкції у Регістрі Інструкцій
4
РІ(РА
0000 0000 0001
Встановлення РА в 1
5
РА(РД
0001 0101 0001 0101
Вибірка з пам’яті і занесення до РД числа
6
РД˄А(А
0000 0101 0000 0101
Множення числа
ІнструкціяXOR (0110 aaaa aaaa aaaa) – здійснює операцію додавання по модулю 2 числа яке знаходиться в акумуляторі на число за адресою аааа аааа аааа. Результат виконання операції зберігається в акумуляторі.
До акумулятора заношу число 0010 0101 0010 0101, ЛАІ встановлюю 0000 0000 0000.
№
№ комірки пам’яті у двійковому коді
Код інструкції
(двійковий)
Мнемонічний запис інструкції
Коментар до кожної
інструкції
1
0000 0000 0000
0110 0000 0000 0001
XOR
Додавання по модулю 2
2
0000 0000 0001
0001 0101 0001 0101
Число
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ(РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА(РД
0110 0000 0000 0001
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД(РІ
0110 0000 0000 0001
декодування інструкції у Регістрі Інструкцій
4
РІ(РА
0000 0000 0001
Встановлення РА в 1
5
РА(РД
0001 0101 0001 0101
Вибірка з пам’яті і занесення до РД числа
6
РД˄А(А
0011 0000 0011 0000
Додавання по модулю 2
Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11" - для непарних номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи.
Формулювання задачі: Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11". Будемо вважати що 2 парами одиниць буде тільки тоді коли йдуть 4 одиниці підряд – 1111, а не 111
Блок-схема алгоритму:
Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті: вхідними даними буде число у якому буде підраховуватися кількість пар одиниць. Воно буде розташовуватися у комірці пам’яті за адресою 16.
Призначення комірок що використовуються: для роботи програми використовуються комірки з адресами 17, 18, 19, 20. У комірку з адресою 17 записана «маска» згідно якої будуть витиратися 2 пари бітів. У комірці 18 буде записано результат виконання команди - кількість одиниць у числі. У комірку з адресою 19 записане число лічильника – тобто скільки ітерацій має виконати лічильник – у моєму випадку записане число 8 оскільки максимально може бути 8 пар одиниць. У комірці 20 записано 1. Цією одиницею програма зменшує лічильник циклу, а також збільшує число кількості одиниць у вхідному числі
Адр. комірки пам’яті у десятковому коді
Код інструкції
Мнемонічний формат інструкції
Коментарі інструкцій.
0
0000 0000 0001 0000
LOAD 16
Завантаження числа, вибірка 2-х бітів, віднімання від вибраних бітів маски
1
0100 0000 0001 0001
AND 17
2
0011 0000 0000 0111
SUB 17
3
1000 0000 0000 0111
JNZ 7
Перевірка чи результат операції 0
4
0000 0000 0001 0010
LOAD 18
Якщо так то збільшується лічильник пар
5
0010 0000 0001 0100
ADD 20
6
0001 0000 0001 0010
STORE 18
7
0000 0000 0001 0001
LOAD 17
Зсув маски
8
1111 1010 0000 0000
ROR
9
1111 1010 0000 0000
ROR
10
0001 0000 0001 0001
STORE 17
11
0000 0000 0001 0011
LOAD 19
Зменшення лічильника циклу
12
0011 0000 0001 0100
SUB 20
13
0001 0000 0001 0011
STORE 19
14
1000 0000 0000 0000
JNZ 0
Перевірка умови виходу з циклу
15
0111 1100 0000 0000
HALT
Зупинка
16
0011 0101 0101 0111
17
1100 0000 0000 0000
18
0000 0000 0000 0000
19
0000 0000 0000 1000
20
0000 0000 0000 0001
Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 4, виконується інвертування пар "11" - для парних номерів із списку групи і інвертування пар "00" - для непарних номерів із списку групи.
Формулювання задачі: Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 4, виконується інвертування пар "11". Будемо вважати що 2 парами одиниць буде тільки тоді коли йдуть 4 одиниці підряд – 1111, а не 111
Блок-схема алгоритму:
Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті: вхідними даними буде число у якому буде підраховуватися кількість пар одиниць. Воно буде розташовуватися у комірці пам’яті за адресою 16.
Призначення комірок що використовуються: для роботи програми використовуються комірки з адресами 17, 19, 20. У комірку з адресою 17 записана «маска» згідно якої будуть витиратися 2 пари бітів. Укомірку з адресою 19 записане число лічильника – тобто скільки ітерацій має виконати лічильник – у моєму випадку записане число 8 оскільки максимально може бути 8 пар одиниць. У комірці 20 записано 1. Цією одиницею програма зменшує лічильник циклу, а також збільшує число кількості одиниць у вхідному числі
Адр. комірки пам’яті у десятковому коді
Код інструкції
Мнемонічний формат інструкції
Коментарі інструкцій.
0
0000 0000 0001 0000
LOAD 16
Завантаження числа, вибірка 2-х бітів, віднімання від вибраних бітів маски
1
0100 0000 0001 0001
AND 17
2
0011 0000 0000 0111
SUB 17
3
1000 0000 0000 0111
JNZ 7
Перевірка чи результат операції 0
4
0000 0000 0001 0000
LOAD 16
Якщо так то виконується інвертування бітів
5
0110 0000 0001 0001
XOR 17
6
0001 0000 0001 0001
STORE 16
7
0000 0000 0001 0001
LOAD 17
Зсув маски
8
1111 1010 0000 0000
ROR
9
1111 1010 0000 0000
ROR
10
0001 0000 0001 0001
STORE 17
11
0000 0000 0001 0011
LOAD 19
Зменшення лічильника циклу
12
0011 0000 0001 0100
SUB 20
13
0001 0000 0001 0011
STORE 19
14
1000 0000 0000 0000
JNZ 0
Перевірка умови виходу з циклу
15
0111 1100 0000 0000
HALT
Зупинка
16
0011 0101 0101 0111
17
1100 0000 0000 0000
18
0000 0101 0101 0100
19
0000 0000 0000 1000
20
0000 0000 0000 0001
Розробити алгоритм і написати програму додавання двох від’ємних 16-ти розрядних чисел. Операція виконується у доповняльному коді.
Формулювання задачі: Розробити алгоритм і написати програму додавання двох від’ємних 16-ти розрядних чисел. Операція виконується у доповняльному коді.
Блок-схема алгоритму:
Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті: вхідними даними будуть числа які потрібно буде додати. Вони будуть розташовуватися у комірках пам’яті за адресою 16,17.
Призначення комірок що використовуються: для роботи програми використовуються комірки з адресами 13,14,15. У комірці 13 записано 1. Цією одиницею програма утворює доповняльний код з оберненого. У комірку з адресою 14 записана «маска» згідно якої будуть інвертуватися біти числа крім знакового. У комірці за адресою 15 зберігатиметься результат виконання арифметичної операції.
Адр. комірки пам’яті у десятковому коді
Код інструкції
Мнемонічний формат інструкції
Коментарі інструкцій.
0
0000 0000 0001 0000
LOAD 16
Переведення в доповняльний код 1-го числа
1
0110 0000 0000 1110
XOR 14
2
0010 0000 0000 1101
ADD 13
3
0001 0000 0000 1111
STORE 15
4
0000 0000 0001 0001
LOAD 17
Переведення в доповняльний код 2-го числа
5
0110 0000 0000 1110
XOR 14
6
0010 0000 0000 1101
ADD 13
7
0010 0000 0000 1111
ADD 15
Додавання 2-х чисел
8
0011 0000 0000 1101
SUB 13
Переведення в прямий код результату.
9
0110 0000 0000 1110
XOR 14
10
0001 0000 0000 1111
STORE 15
11
0111 1100 0000 0000
HALT
СТОП
12
0000 0000 0000 0000
13
0000 0000 0000 0001
14
0111 1111 1111 1111
15
0000 0000 0000 0000
16
0000 0000 0000 0000
17
0000 0000 0000 0000
Оформити та захистити звіт з лабораторної роботи.
Висновок: .На цій лабораторні й роботі я вивчив призначення логічних операцій. Навчивсь створювати і використовувати "фільтри" за допомогою логічних операцій. Вивчив правила кодування додатних і від’ємних двійкових чисел для здійснення арифметичних операцій у комп’ютерах. Навчився кодувати двійкові числа із знаком у інструкціях навчального комп’ютера – симулятора DeComp.