Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з курсової
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “Дослідження інструкцій логічних операцій і виконання арифметичних операцій навчального симулятора DeComp ”
2008
Мета роботи: 1. Вивчити призначення логічних операцій.
2. Навчитись створювати і використовувати "фільтри" за допомогою
логічних операцій.
3. Вивчити правила кодування додатних і від’ємних двійкових чисел для
здійснення арифметичних операцій у комп’ютерах;
4. Навчитися кодувати двійкові числа із знаком у інструкціях навчального
комп’ютера – симулятора DeComp.
1. Теоретичні відомості
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, 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 Ввесли у симулятор та дослідити у покроковому режимі програму, яка буде виконувати логічні операції І, АБО, Виключне-АБО та НЕ над двома числами. Коди чисел вибрали згідно варіанту 26, що визначається у 1-й лабораторній роботі, використовуючи всі чотири тетради 16-ти розрядного формату. Отже число 35 записали 0010 0011 0010 0011, а число 26 записали 0001 1010 0001 1010. У 10 комірку записали 35,у 11 комірку записали 26
Логічна операція І
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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
Завершує виконання програми
РА
РД
А
РІ
0000 0000 1010
0001 1010 0001 1010
0001 1010 0001 1010
0000 0000 0000 1010
0000 0000 1011
0111 1000 0000 0000
0001 1000 0000 0000
0100 0000 0000 1011
0000 0000 1100
0001 1000 0000 0000
0001 1000 0000 0000
0001 0000 0000 1100
0000 0000 0011
0111 1100 0000 0000
0001 1000 0000 0000
0111 1100 0000 0000
ЛАІ
РО
0000 0000 0001
000
0000 0000 0010
000
0000 0000 0011
000
0000 0000 0011
000
Логічна операція АБО
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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
Завершує виконання програми
РА
РД
А
РІ
0000 0000 1010
0010 0011 0010 0011
0010 0011 0010 0011
0000 0000 0000 1010
0000 0000 1011
0001 1010 0001 1010
0011 1011 0011 1011
0101 0000 0000 1011
0000 0000 1100
0011 1011 0011 1011
0011 1011 0011 1011
0001 0000 0000 1100
0000 0000 0011
0111 1100 0000 0000
0011 1011 0011 1011
0111 1100 0000 0000
ЛАІ
РО
0000 0000 0001
000
0000 0000 0010
000
0000 0000 0011
000
0000 0000 0011
000
Логічна операція Виключне-АБО
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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
Завершує виконання програми
РА
РД
А
РІ
0000 0000 0101
0010 0000 0001 0110
0010 0000 0001 0110
0000 0000 0000 0101
0000 0000 1011
0001 1010 0001 1010
0011 1010 0000 1100
0110 0000 0000 1011
0000 0000 1100
0011 1010 0000 1100
0011 1010 0000 1100
0001 0000 0000 1100
0000 0000 0011
0111 1100 0000 0000
0011 1010 0000 1100
0111 1100 0000 0000
ЛАІ
РО
0000 0000 0001
000
0000 0000 0010
000
0000 0000 0011
000
0000 0000 0011
000
Логічна операція НЕ
№
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0000 0000 0000
0000 0000 0000 1010
Load 10
Завантажує операнд 10-ї комірки
2
0000 0000 0001
0111 0000 0000 1011
NOT 11
Виконує операцію НЕ над операндами 10-ї і 11-ї комірок
3
0000 0000 0010
0111 1100 0000 0000
Halt
Завершує виконання програми
РА
РД
А
РІ
0000 0000 1010
0010 0011 0010 0011
0010 0011 0010 0011
0000 0000 0000 1010
0000 0000 1011
0010 0011 0010 0011
0000 0000 0000 0000
0110 0000 0000 1011
0000 0000 1100
0000 0000 0000 0000
0000 0000 0000 0000
0001 0000 0000 1100
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0000
0111 1100 0000 0000
ЛАІ
РО
0000 0000 0001
000
0000 0000 0010
S
0000 0000 0011
S
0000 0000 0011
S
3) Дослідили у потактовому режимі інструкції OR,NOT (парний номер списку групи.) До 1-ї комірки – число 15 (двійковий код = 0000 0000 0000 1111), а до акумулятора число 16 (двійковий код = 0000 0000 0001 0000).Виписали результати виконання роботи
Інструкція АБО
№
Мнемонічний запис
Код що обробляється
Коментар
1
ЛАІ→РА
0000 0000 0001
Вибір адреси 1-ої інструкції і занесення до РА
2
РА→РД
0101 0000 0000 0001
Вибір коду інструкції з РА і занесення до РД
3
РД→РІ
0101 0000 0000 0001
Декодування інструкції у РІ
4
РІ→РА
0000 0000 0000 0001
Вибір адреси 1-го операнда
5
РА→РД
0101 0000 0000 0000
Вибір коду 1-го операнда з пам’яті і занесення до РД(Другий операнд у акумуляторі)
6
РД+А→А
0101 0000 0000 0000
Виконання операції АБО
7
ZSC(A)→РО
000
Встановлення прапорців регістру ознак
8
ЛАІ +1→ЛАІ
0000 0000 0001
Підготовка адреси нової інструкції
Інструкція НЕ
№
Мнемонічний запис
Код що обробляється
Коментар
1
ЛАІ→РА
0000 0000 0001
Вибір адреси 1-ої інструкції і занесення до РА
2
РА→РД
0111 0000 0000 0001
Вибір коду інструкції з РА і занесення до РД
3
РД→РІ
0111 0000 0000 0001
Декодування інструкції у РІ
4
А+1→А
1010 1111 1111 1111
Виконання операції НЕ(Другий операнд у акумуляторі
5
ZSC(A)→РО
S
Встановлення прапорців ознак
6
ЛАІ +1→ЛАІ
0000 0000 0001
Підготовка адреси нової інструкції
3) Для підрахування пар «00» попередньо в комірку з номером 20 записую число, в якому буду рахувати пари – 0011 0011 1011 1011, в комірку з номером 21 записую маску – 0000 0000 0000 0000, в 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
Закінчити виконання програми
В результаті одержую число 3
4) Для інвертування пар «11» в 20-у комірку заношу те саме число, в 21-у – маску, в 22-у – маску(0000 0000 0000 0000), 23-у – 1, а в 24-у – 17(10001) і виконую таку програму:лічильник циклу
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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 0000 1000 1000
Висновок
На даній лабораторній роботі ми 1. Вивчили призначення логічних операцій.
2. Навчились створювати і використовувати "фільтри" за допомогою
логічних операцій.
3. Вивчили правила кодування додатних і від’ємних двійкових чисел для
здійснення арифметичних операцій у комп’ютерах;
4. Навчилися кодувати двійкові числа із знаком у інструкціях навчального
комп’ютера – симулятора DeComp.