You are on page 1of 12

Міністерство освіти і науки України

Національний університет „Львівська політехніка”


Кафедра CКС

Звіт
з лабораторної роботи № 4
з дисципліни “Організація та функціонування комп’ютерів”
на тему: “ Дослідження інструкцій логічних операцій і виконання арифметичних операцій
навчального комп’ютера – симулятора DeComp”

Виконав: ст.гр. КІ-11


Хомик Д. І.
Прийняв: ст.викл.
Кудрявцев О.Т.

Львів
2016
Тема: Дослідження інструкцій логічних операцій і виконання арифметичних
операцій навчального комп’ютера – симулятора DeComp.
Мета:
1. Вивчити призначення логічних операцій.
2. Навчитись створювати і використовувати "фільтри" за допомогою логічних
операцій.
3. Вивчити правила кодування додатних і від’ємних двійкових чисел для
здійснення арифметичних операцій у комп’ютерах;
4. Навчитися кодувати двійкові числа із знаком у інструкціях навчального
комп’ютера – симулятора DeComp.
Теоретичні відомості:

1.1. Загальні відомості про логічні функції


Усі дії, які виконуються у комп’ютері, повинні бути закодовані попередньо у програмі.
За допомогою кожної команди програми кодується одна операція комп’ютера, яка
виконується над парою операндів.
Арифметична операція – операція, у якій операнди і результат сприймаються як
числа. До них відносяться операції додавання і віднімання, з якими ми познайомилися у
попередніх роботах, а також операції множення і ділення. Усі інші операції, наприклад,
добування кореня квадратного, піднесення до степеня, дифференцювання та ін.,
реалізуються у комп’ютері на основі вказаних операцій.
Логічна операція – операція, що полягає у логічній обробці операндів, які приймають
у ній участь. До них відносяться операції порівняння, визначення модуля, визначення
ознак результатів арифметичних операцій та ін. До них часом відносять операції зсуву
праворуч або ліворуч.
Точна, певна послідовність операцій або програма, яка потрібна для виконання
певної задачі на комп’ютері, формується на основі математичної теорії, відомої як алгебра
логіки. Створив алгебру логіки англійський математик Дж. Буль (1815 – 1864). Тому її
називають також алгеброю Буля. Алгебра логіки отримала значний розвиток завдяки
роботам таких вчених як Е. Пост, К. Шеннон, В. Глушков, С. Яблонський та ін. Основним
поняттям алгебри логіки є висловлювання.
Під час вивчення звичайної алгебри розглядають залежності типу А = f(x1, x2, …xn),
де x1, x2, …xn – аргументи, а А – функція. Аргументи і функція при цьому можуть
набувати найрізноманітніших числових значень: додатних і від’ємних, цілих і дробових. У
алгебрі логіки вивчають залежності аналогічного вигляду А = f(x1, x2, …xn), але такі, в
яких аргументи і функція можуть набувати тільки двох значень: 1 і 0. Практичне
використання таких функцій є формальним (математичним) описом логіки людського
мислення в процесі виконання якоїсь задачі.
Вся діяльність людини так або інакше пов’язана з різними висловлюваннями. Будь-
яке вимовлене твердження, зауваження є певним висловлюванням. У алгебрі логіки саме
висловлювання є змінною (аргументом), яка може набувати одного з двох можливих
значень (істина чи фальш, так чи ні, правдиво чи не правдиво) і над якою можна
виконувати деякі дії. Подібно до аргументів у звичайній алгебрі, висловлювання
позначають буквами якого-небудь алфавіту, наприклад, X, Y,Z або а, в, с. . .
За змістом висловлювання поділяють на прості і складні. Наприклад, прості: “вікно
відчинене”, “у квартирі холодно”, “Микола вчиться в національному університеті
“Львівська політехніка”, “Микола йде на стадіон”. З простих висловлювань за допомогою
слів-зв’язок (сполучників) І, АБО, НЕ, ЯКЩО-ТО та ін. утворюють складні. Наприклад,
речення: „Вікно відчинене і у квартирі холодно”, „Микола піде у парк або на стадіон”.

1.2. Опис логічних інструкцій навчального комп’ютера


Група інструкцій, яку ми будемо досліджувати у даній роботі, присвячена логічним
операціям: AND (логічне І), OR (логічне АБО), XOR (логічне Виключне-АБО) та NOT
(логічне НЕ).
За винятком останньої логічної інструкції NOT, усі решта є адресними інструкціями,
які виконують логічні операції над двома числами: значенням числа, що розміщене у
акумуляторі та вмістом комірки пам’яті, на яку вказує 12-розрядна адреса у машинному
коді інструкції, а також записують результат назад до акумулятора. Інструкція NOT є
безадресною і вона заперечує (інвертує) усі розряди акумулятора із збереженням
результату назад до акумулятора.
Логічну операцію Виключне-АБО іноді ще називають сумою за модулем 2, або –
додаванням за модулем 2. Дійсно, результат операції Виключне-АБО повністю співпадає
з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел: 0  1
= 1 (0 + 1 = 1), хоча 1  1 = 0 (1 + 1 = 10). Виключність назви цієї логічної операції походить
з її визначення: результат дорівнює 1, коли тільки одне з вхідних чисел дорівнює 1. При
виконанні цієї операції над групою аргументів, результат дорівнює 1, якщо серед
аргументів непарна кількість 1, якщо кількість 1 парна , то результат = 0.

1.3. Подання від’ємних чисел у комп’ютерах

Для виконання операцій обробки інформації у комп’ютерах і системах збереження та


передачі даних, її замінюють числами. Позначення різної інформації відповідними
числами називають цифровим кодування, а послідовність цифр для позначення певної
інформації - її кодом.
Кодуванню числової інформації у комп’ютерах приділяється особлива увага. Це
викликано декількома причинами, одна з яких – наявність знаків у числах. Основна
проблема полягає у тому, що центральним складовим елементом арифметично-логічного
пристрою (АЛП) є суматор, який виконує лише порозрядне додавання двох кодів із
врахуванням ваги кожного з розрядів та з організацією міжрозрядних переносів. Знак
числа суматор не “розуміє”, його не розрізняє і сприймає знак числа як звичайний
двійковий код.
На даний час прийнято, що мінус кодується як одиниця (1), а плюс – як нуль (0).
Для здійснення арифметичних операцій у комп’ютерах були розроблені спеціальні
способи кодування і відповідні коди. Найбільш поширеними є прямий, обернений та
доповняльний коди. Підкреслимо, що доповняльний та обернений коди використовуються
тільки для подання від’ємних двійкових чисел. Додатні числа у цих кодах не міняють
свого зображення і подаються як у прямому коді.
Хід виконання роботи
1. Вивчити і записати у звіт призначення логічних операцій AND, OR, NOT I XOR.

Інструкція NOT інвертує усі розряди акумулятора із збереженням результату назад


до акумулятора – 0 замінює 1 і навпаки. Логічну операцію AND називають кон’юнкцією
або логічним множенням. Результат виконання операції буде рівний «1» коли дві біта
будуть рівні 1, у решти випадках «0». Логічна операція OR має назву диз’юнкція або
логічне додавання – результат виконання буде рівний «1» коли один з бітів, над якими
виконується операція рівний 1. Логічну операцію XOR ще називають сумою за модулем 2,
або – додаванням за модулем 2. Результат операції повністю співпадає з молодшим
розрядом результату арифметичного додавання двох 1-розрядних чисел.

2. Ввести у симулятор та дослідити у покроковому режимі програму, яка буде


виконувати логічні операції І, АБО, Виключне-АБО та НЕ над двома числами. Коди чисел
вибрати згідно варіанту, що визначається у 1-й лабораторній роботі, використовуючи всі
чотири тетради 16-ти розрядного формату. Наприклад, якщо задане число 18 10 = 000100102
, воно записується у вигляді: 00010010 00010010. Виписати результати виконання
програми та значення прапорців ознак.

Мій варіант 22. Мої числа 13 та 33.


0000 1101 00000 1101 – (перше число);
0010 0001 0010 0001 – (друге число).

В 16-ту комырку пам’яті я записав перше число, а в 17-ту – друге. В першу, четверту
сьому та десяту комірки були записані двійкові коди логічних операцій AND, OR,
XOR, NOT.

Програма в інструкціях:

Мнемонічний
№ комірки Двійковий код
запис Коментар
пам’яті інструкції
інструкції
завантажити число 1310 до
0000 0000 0000 0000 0000 0000 1010 LOAD 16;
Акумулятора.
0000 0000 0001 0100 0000 0001 0001 AND 17; 1310 & 3310
0000 0000 0010 0001 0000 0001 0010 STORE 18; Записати число в 18 комірку.
0000 0000 0011 0000 0000 0000 1010 LOAD 16; завантажити число 1310 до
Акумулятора.
0000 0000 0100 0101 0000 0001 0001 OR 17; 1310 | 3310
0000 0000 0101 0001 0000 0001 0011 STORE 19; Записати число в 19 комірку.
завантажити число 1310 до
0000 0000 0110 0000 0000 0000 1010 LOAD 16;
Акумулятора.
0000 0000 0111 0110 0000 0001 0001 XORE 17; 1310  3310
0000 0000 1000 0001 0000 0001 0100 STORE 20; Записати число в 20 комірку.
0000 0000 1001 0000 0000 0000 1010 LOAD 16: Завантажити число 1310 до
Акумулятора.
0000 0000 1010 0111 0000 0000 0000 NOT; 0000 1101 000001101
0000 0000 1011 0001 0000 0001 0101 STORE 21; Записати число в 21 комірку.
0000 0000 1100 0000 0000 0001 0001 LOAD 17; Завантажити число 3310 до
Акумулятора.
0000 0000 1101 0111 0000 0000 0000 NOT 0010 0001 0010 0001
0000 0000 1110 0001 0000 0001 0110 STORE 22; Завантажити число в 22
комірку.
0000 0000 1111 0111 1100 0000 0000 HALT; Зупинити програму

РА РД А РІ ЛАІ РО(Z S C)
1 0000 0001 0000 0000 1101 0000 1101 0000 1101 0000 1101 0000 0000 0001 0000 0000 0000 0001 000
2 0000 0001 0001 0010 0001 0010 0001 0000 0001 0000 0001 0100 0000 0001 0001 0000 0000 0010 000
3 0000 0001 0010 0000 0001 0000 0001 0000 0001 0000 0001 0001 0000 0001 0010 0000 0000 0011 000

4 0000 0001 0000 0000 1101 0000 1101 0000 1101 0000 1101 0000 0000 0001 0000 0000 0000 0100 000
5 0000 0001 0001 0010 0001 0010 0001 0010 1101 0010 1101 0101 0000 0001 0001 0000 0000 0101 000
6 0000 0001 0011 0010 1101 0010 1101 0010 1101 0010 1101 0001 0000 0001 0011 0000 0000 0110 000
7 0000 0001 0000 0000 1101 0000 1101 0000 1101 0000 1101 0000 0000 0001 0000 0000 0000 0111 000
8 0000 0001 0001 0010 0001 0010 0001 0010 1100 0010 1100 0110 0000 0001 0001 0000 0000 1000 000
9 0000 0001 0100 0010 1100 0010 1100 0010 1100 0010 1100 0001 0000 0001 0100 0000 0000 1001 000
10 0000 0001 0000 0000 1101 0000 1101 0000 1101 0000 1101 0000 0000 0001 0000 0000 0000 1010 000
11 0000 0000 1010 0111 0000 0000 0000 1111 0010 1111 0010 0111 0000 0000 0000 0000 0000 1011 010
12 0000 0001 0101 1111 0010 1111 0010 1111 0010 1111 0010 0001 0000 0001 0101 0000 0000 1100 010
13 0000 0001 0001 0010 0001 0010 0001 0010 0001 0010 0001 0000 0000 0001 0001 0000 0000 1101 010
14 0000 0000 1101 0111 0000 0000 0000 1101 1110 1101 1110 0111 0000 0000 0000 0000 0000 1110 010
15 0000 0001 0110 1101 1110 1101 1110 1101 1110 1101 1110 0001 0000 0001 0110 0000 0000 1111 010
16 0000 0000 1111 1101 1110 1101 1110 1101 1110 1101 1110 0111 1100 0000 0000 0000 0000 1111 010

Дослідження програми в покроковому режимі:

Результат виконання інструкції AND: Ак = 0000 0001 0000 0001, РО = 000;


Результат виконання інструкції OR: Ак = 0010 1101 0010 1101, РО = 000;
Результат виконання інструкції XOR: Ак = 0010 1100 0010 1100, РО = 000;
Результат виконання інструкції NOT для числа 0000 1101 00000 1101 :
Ак = 1111 0010 1111 0010, РО = 010;
Результат виконання інструкції NOT для числа 0010 0001 0010 0001:
Ак = 1101 1110 1101 1110, РО = 010.
3. Дослідити у потактовому режимі інструкції AND I XOR - для непарних
номерів із журналу списку групи, OR та NOT - для парних номерів із списку групи.
Виписати результати виконання програми.

Досліджую інструкції OR та NOT .

1) Дослідження інструкції OR
1. Ак.  Число(0000 1101 00000 1101), записав число 1310, використавши всі 4
тетради 16-ти розрядного формату.
2. Adr.0  OR(0101 0000 0000 0001), записав число 3310, використавши всі 4
тетради 16-ти розрядного формату.
3. Adr.1  Число (0010 0001 0010 0001 <=> 1000012)
4. ЛАІ Adr 0.

№ Мнемонічний Код, що Коментар


запис обробляється
1 ЛАІ  РА 0000 0000 0000 вибір адреси інструкції і занесення її до Регістра
Адреси
2 Пам(РА)  РД 0101 0000 0000 0001 вибір коду інструкції з РА і занесення його до
Регістра Даних
3 РД  РІ 0101 0000 0000 0001 декодування інструкції у Регістрі Інструкцій
4 РІ РА 0000 0000 0001 Передача адреси операнда
5 Пам(РА)  РД 0010 0001 0010 0001 вибір коду другого операнда з РА і занесення його
до Регістра Даних
6 А | РД  А 0010 1101 0010 1101 Виконується інструкція OR і результат
записується до А
7 АРО 000 Встановлення прапорців ознак
8 ЛАІ + 1  ЛАІ 0000 0000 0001 підготовка адреси нової інструкції

2) Дослідження інструкції NOT:


1. Ак.  Число(0000 1101 00000 1101) , записав число 1310, використавши всі 4
тетради 16-ти розрядного формату.
2. Adr.0  NOT(0111 0000 0000 0000)
3. ЛАІ Adr 0.

№ Мнемонічний Код, що Коментар


запис обробляється
1 ЛАІ  РА 0000 0000 0000 вибір адреси інструкції і занесення її до Регістра
Адреси
2 Пам(РА)  РД 0111 0000 0000 0000 вибір коду інструкції з РА і занесення його до
Регістра Даних
3 РД  РІ 0111 0000 0000 0000 декодування інструкції у Регістрі Інструкцій
4 Ā  A 0000 0000 0001 Виконується інструкція NOT і результат
записується до Акумулятора
7 АРО 010 Встановлення прапорців ознак
8 ЛАІ + 1  ЛАІ 0000 0000 0001 підготовка адреси нової інструкції
4. Розробити алгоритм і написати програму, що для довільного числа "А", яке
розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11" - для непарних
номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи.

Блок-схема алгоритму:

Початок

Вхідні дані

Виконати перевірку цифр двох


молодших розрядів числа А

Якщо дорівнює Якщо не дорівнює


Порівняння двох
молодших розрядів
числа з нулем

Збільшення змінної
лічильника на 1

Зменшення значення числа


прапорця на 1

Зсув числа А вправо двічі,


для перевірки наступних
цифр в числі

Так Ні
Перевірка на
наявність цифр
у числі

Виведення
лічильника

Кінець
Число А – задане число, яке міститься в 20тій комірці. Число В – лічильник пар
нулів в числі А, міститься в 21шій комірці. Число k – прапорець, для перевірки наявності
пар цифр в числі А, міститься в 22гій комірці, k = 8. В комірці 23 записано число 1.
В комірці 25 записано число 310.

Програма в інструкціях:
№і Двійковий код Мнемонічний Коментар до груп інструкцій, що відповідають
інструкції формат блокам алгоритму програми
інструкції
1 0000 0000 0001 0100 LOAD 20 Виконуючи операцію кон’юнкції встановлюю,
2 0100 0000 0001 1001 AND 25 чи дорівнюють два молодших розряди числа
3 1001 0000 0000 0111 JZ 7 “A” нулю.
4 0011 0000 0000 1110 LOAD 21 Якщо розряди дорівнюють нулю, тоді збільшую
5 0010 0000 0001 0111 ADD 23 змінну “B” лічильника на 1, якщо розряди не
6 0001 0000 0001 0101 STORE 21 дорівнюють нулю – виконується наступна група
інструкцій.
7 0000 0000 0000 1100 LOAD 20 Зсув числа “A” вправо для перевірки двох
8 1111 1110 0000 0000 ROR наступних розрядів числа.
9 1111 1110 0000 0000 ROR
10 0001 0000 0001 0100 STORE 20
11 0000 0000 0001 0110 LOAD 22 Перевіряю число на наявність неперевірених пар
12 0011 0000 0001 0111 SUB 23 цифр.
13 0001 0000 0001 0110 STORE 22
14 1001 0000 0000 0000 JZ 1
15 1000 0000 0000 0000 LOAD 21 Якщо всі пари цифр числа перевірені -
завантажити до акумулятора лічильник кількості
пар цифр ріних 0.
16 0111 1100 0000 0000 HALT Зупинка процесора

5. Розробити алгоритм і написати програму, у якій для числа, яке


використовується у пункті 4, виконується інвертування пар "11" - для парних номерів із
списку групи і інвертування пар "00" - для непарних номерів із списку групи.
Блок-схема алгоритма:
Початок

Вхідні дані

Виконати перевірку цифр двох


молодших розрядів числа А

Якщо не дорівнюють Встановити чи Якщо дорівнюють


дорівнюють два
молодші розряди
числа 1

Встановити значення двох


молодших розрядів рівним 0

Встановити молодшими
розрядами дві наступні
цифри числа

Зменшити лічильник цифр


числа на 1

Так Перевірка на Ні
наявність не
перевірених цифр
у числі

Виведення числа
А

Кінець
Число А – задане число, яке міститься в 20тій комірці. Число k – прапорець, для
перевірки наявності цифр в числі А, міститься в 22гій комірці, k = 8. В комірці 25
записано число 310.

Програма в інструкціях:

№і Двійковий код Мнемонічний Коментар до груп інструкцій, що відповідають


інструкції формат блокам алгоритму програми
інструкції
1 0000 0000 0001 0100 LOAD 20 Почергово, виконуючи операції кон’юнкції та
2 0100 0000 0001 1001 AND 25 віднімання, встановлюю чи дорівнюють дві
3 0011 0000 0001 1001 SUB 25 цифри молодших розрядів одиниці.
4 1001 0000 0000 0111 JZ
5 0011 0000 0000 1110 LOAD 20 Якщо цифри дорівнюють нулю, встановлюю два
6 0011 0000 0001 1001 SUB 25 молодші розряди числа рівними 0
7 1111 1110 0000 0000 ROR Встановити старшими розрядами дві наступні
8 1111 1110 0000 0000 ROR цифри числа і записати його в 20 комірку.
9 0001 0000 0001 0100 STORE 20
10 0000 0000 0001 0110 LOAD 22 Зменшити лічильник пар цифр в числі на 1 і
11 0011 0000 0001 0111 SUB 23 порівняти його з нулем. Якщо він дорівнює нулю,
12 0001 0000 0001 0110 STORE 22 то в числі всі пари цифр перевірені. Якщо ні –
13 1001 0000 0000 0000 JZ 1 завантажуємо число А в Ак.
14 1000 0000 0000 0000 LOAD 20 Завантаження числа ”A” до акумулятора
15 0111 1100 0000 0000 HALT Зупинка процесора

6. Розробити алгоритм і написати програму додавання двох від’ємних 16-ти


розрядних чисел. Операція виконується у доповняльному коді.
Блок-схема алгоритму:

Початок

Записати в акумулятор число A

Перевести число А в доповняльний код

Записати в акумулятор число B

Перевести число B в доповняльний код

Додати числа

Перевести отримане число в прямий код

Виведення
результату

Кінець
Числа А та В – задані, містяться в 16тій та 17тій комірках.
Програма в інструкціях:

Адр.
комірки Мнемонічни
пам’яті у Код інструкції й формат Коментарі інструкцій.
десятковом інструкції
у коді
0 0000 0000 0001 0000 LOAD 16
Переведення в
1 0111 0000 0000 0000 NOT
доповняльний код 1-го
2 0010 0000 0000 1101 ADD 13
числа
3 0001 0000 0001 0000 STORE 15
4 0000 0000 0001 0001 LOAD 17 Переведення в
5 0111 0000 0000 0000 NOT доповняльний код 2-го
6 0010 0000 0000 1101 ADD 13 числа
7 0010 0000 0000 1111 ADD 16 Додавання 2-х чисел
8 0111 0000 0000 0000 NOT
Переведення в прямий код
9 0010 0000 0000 1101 ADD 13
результату.
10 0001 0000 0000 1111 STORE 15
11 0111 1100 0000 0000 HALT СТОП

Висновок
На цій лабораторні й роботі я вивчив призначення логічних операцій. Я навчився
створювати і використовувати "фільтри" за допомогою логічних операцій. Вивчив
правила кодування додатних і від’ємних двійкових чисел для здійснення арифметичних
операцій у комп’ютерах. Також я навчився кодувати двійкові числа із знаком у
інструкціях навчального комп’ютера – симулятора DeComp.

You might also like