Міністерство освіти та науки України
Національний університет «Львівська політехніка»
ЗВІТ
З лабораторної роботи №4
З дисципліни: «Організація та функціонування комп’терів»
На тему: «Дослідження інструкцій логічних операцій навчального комп’ютера – симулятора DeComp. Вивчення порядку
виконання операції додавання довільних чисел у
процесорі навчального комп’ютера»
Львів 2006
Тема: Дослідження інструкцій логічних операцій навчального комп’ютера – симулятора DeComp. Вивчення порядку виконання операції додавання довільних чисел у процесорі навчального комп’ютера.
Мета: Вивчити призначення логічних операцій; навчитись створювати і використовувати «маски» за допомогою логічних операцій; вивчити алгоритми додавання довільних (додатних та від'ємних) двійкових чисел у навчальному комп'ютері DeComp.
Теоретичні відомості
Всі основні процеси з обробки інформації здійснюються у процесорі комп’ютера, у складі якого центральний пристрій керування (ЦПК) і арифметико-логічний пристрій (АЛП). ЦПК призначений для виконання функцій керування комп’ютером у цілому і його окремими пристроями у процесі вирішення задачі у відповідності із заданою програмою. АЛП використовується для виконання арифметичних і логічних операцій операцій над операндами (даними) і командами, вироблення різних ознак, що впливають на хід обчислювального процесу.
Точна, певна послідовність операцій або програма, яка потрібна для виконання певної задачі на комп’ютері, формується на основі математичної теорії, відомої як алгебра логіки. Створив алгебру логіки англійський математик Дж. Буль (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.
Логічну операцію І (*,&, () називають кон’юнкцією або логічним множенням. Дійсно, результат операції І можна отримати, якщо перемножувати вхідні 1-розрядні числа: 0 * 1 = 0 або 1 * 1 = 1. Також назва кон’юнкія (з’єднання) йде від визначення результатів логічної операції І: результат дорівнює 1 тільки у випадку, коли всі аргументи дорівнюють 1.
Логічна операція І (&) дозволяє примусово встановити в "0" (обнулити) потрібні розряди даного числа.
Логічна операція АБО (+, |, () має назву диз’юнкція або логічне додавання. Диз’юнкція (роз’єднання) означає, що кожне з вхідних чисел незалежно виявляє своє значення: за визначенням результат логічної операції АБО дорівнює 1, коли хоча б одне (або всі) з вхідних аргументів дорівнюють 1. Правило логічного додавання тотожньо із арифметичним додаванням у 3-х випадках з 4-х: 1+1 ( 1, хоча 1 | 1 = 1.
Логічна операція АБО ( | ) дозволяє примусово встановити в "1" потрібні розряди даного числа.
Логічну операцію Виключне-АБО ((, #) іноді ще називають сумою за модулем 2, або – додаванням за модулем 2. Дійсно, результат операції Виключне-АБО повністю співпадає з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел: 0 ( 1 = 1 (0 + 1 = 1), хоча 1 ( 1 = 0 (1 + 1 = 10). Виключність назви цієї логічної операції походить з її визначення: результат дорівнює 1, коли тільки одне з вхідних чисел дорівнює 1. При виконанні цієї операції над групою аргументів, результат дорівнює 1, якщо серед аргументів непарна кількість 1, якщо кількість 1 парна , то результат = 0.
Логічна операція НЕ є дуже проста: = 1, = 0, тобто - заміна вхідного значення на протилежне. Цю операцію ще називають запереченням або інвертуванням (від англ. inversion – перевертання).
Виконання роботи
Досліджую операцію І, попередньо в 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
Наступною розгляну інструкцію АБО, для цього використаю таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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
Розглядаю інструкцію Виключне-АБО, для цього виконую наступну програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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
Розглядаю інструкцію 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
2) Досліджую інструкцію AND в потактовому режимі, використовуючи програму описану вище:
Такт1: ЛАІ → РА – 0000 0000 0001;
Такт2: Пам’ять РА → РД – 0100 0000 0000 1011;
Такт3: РД → РІ – 0100 0000 0000 1011;
Такт4: РІ → РА – 0000 0000 1011;
Такт5: Пам’ять РА → РД – 0101 0101 0101 0101;
Такт6: РД + АК → 0100 0001 0100 0001;
Такт7: АК → РО.
Інструкцію XOR розглядаю за допомогою програми, яка була складена вище:
Такт1: ЛАІ → РА – 0000 0000 0001;
Такт2: Пам’ять РА → РД – 0110 0000 0000 1011;
Такт3: РД → РІ – 0110 0000 0000 1011;
Такт4: РІ → РА – 0000 0000 1011;
Такт5: Пам’ять РА → РД – 0101 0101 0101 0101;
Такт6: РД + АК → 1001 0110 1001 0110;
Такт7: АК → РО – S.
3) Для підрахування пар «11» попередньо в комірку з номером 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
0100 0000 0010 1001
AND 41
Проводжу операцію логічного множення над значенням акумулятора та операндом 41-ї комірки
3
0000 0000 0010
1111 1110 0000 0000
RCR
Перевіряю наявність пари «11», при її відсутності виконання програми продовжується з 11-ї комірки
4
0000 0000 0011
1100 0000 0000 1011
JNC 11
5
0000 0000 0100
1111 1110 0000 0000
RCR
6
0000 0000 0101
1100 0000 0000 1011
JNC 11
7
0000 0000 0110
0000 0000 0010 1010
Load 42
Додаю до лічильника пар одиницю
8
0000 0000 0111
0010 0000 0010 1011
Add 43
9
0000 0000 1000
0001 0000 0010 1010
Store 42
10
0000 0000 1001
0000 0000 0010 1000
Load 40
Зсуваю число для виконання подальшої перевірки
11
0000 0000 1010
1111 1000 0000 0000
ROL
12
0000 0000 1011
0001 0000 0010 1000
Store 40
13
0000 0000 1100
0000 0000 0010 1100
Load 44
Виконую зміну параметру циклу
14
0000 0000 1101
0011 0000 0010 1011
Sub 43
15
0000 0000 1110
0001 0000 0010 1100
Store 44
16
0000 0000 1111
1100 0000 0000 0000
JNZ 0
Виконую перевірку кінця циклу (керування циклом)
17
0000 0001 0000
0000 0000 0010 1010
Load 42
Виводжу кінцевий результат на пристрій виводу
18
0000 0001 0001
0111 1000 0000 0000
Output
19
0000 0001 0010
0111 1100 0000 0000
Halt
Закінчую виконання програми
В результаті одержую число 4.
4) Для інвертування пар «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
0100 0000 0010 1001
AND 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
0100 0000 0010 1010
AND 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 0000 1111
0000 0000 0010 1000
Load 40
Виводитжу кінцевий результат на пристрій виводу
17
0000 0001 0000
0111 1000 0000 0000
Output
18
0000 0001 0001
0111 1000 0000 0000
Halt
Закінчую виконання програми
Після виконання програми одержу таке число – 0000 0010 0010 0000.
5) Щоб виконати додавання двох чисел в 40-у комірку заношу додатнє число 0000 0000 0001 0000, а у 41-у – 1000 0000 0000 1000. В 42-у – 1000 0000 0000 0000,
43-у – 1. Від’ємне число подам у доповняльному коді, для цього використаю таку програму:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
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
Зупинка виконання програми
Після виконання програми одержую таке число: 0000 0000 0000 1000. Нуль на початку числа означає, що число додатне.
Висновки: Під час виконання цієї лабораторної роботи я вивчив призначення логічних операцій; навчився створювати і використовувати «маски» за допомогою логічних операцій. Також я вивчив алгоритми додавання довільних чисел у навчальному комп’ютері DeComp.
Важливим є те, що під час виконання програми комп'ютеру неможливо відрізнити де додатнє, а де від'ємне число, тому складаючи програму необхідно передбачити виконання алгоритму для представлення від'ємних чисел в доповняльному коді.