Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб4.docx
Скачиваний:
20
Добавлен:
10.12.2018
Размер:
127.96 Кб
Скачать

2. Порядок виконання роботи:

  1. Вивчити і записати у звіт призначення логічних операцій AND, OR, NOT I XOR.

Виконання:

1. AND – машинний код 0100 аааа аааа аааа, де аааа аааа аааа адреса комірки операнда. Логічну операцію AND (логічне І) називають кон’юнкцією (від англ. – conjuction – з’єднання) або логічним множенням. Дійсно, результат операції І можна отримати, якщо перемножувати вхідні 1-розрядні числа: 0 * 1 = 0 або 1 * 1 = 1. Також назва кон’юнкія (з’єднання) йде від визначення результатів логічної операції І: результат дорівнює 1 тільки у випадку, коли всі аргументи дорівнюють 1.

Логічна операція І (&) дозволяє примусово встановити в "0" (обнулити) потрібні розряди даного числа:

10101010 & 11110000 = 10100000

2. OR – машинний код 0101 аааа аааа аааа, де аааа аааа аааа адреса комірки операнда. Логічна операція АБО (+, |, ) має назву диз’юнкція (від англ. – disjunction – роз’єднання) або логічне додавання. Диз’юнкція означає, що кожне з вхідних чисел незалежно виявляє своє значення: за визначенням результат логічної операції АБО дорівнює 1 лише тоді, коли хоча б одне (або всі) з вхідних аргументів дорівнюють 1. Правило логічного додавання тотожньо із арифметичним додаванням у 3-х випадках з 4-х: 1+1  1, хоча 1 | 1 = 1.

Логічна операція АБО ( | ) дозволяє примусово встановити в "1" потрібні розряди даного числа:

10101010 | 11110000 = 11111010

3. XOR – машинний код 0110 аааа аааа аааа, де аааа аааа аааа адреса комірки операнда. Логічну операцію Виключне-АБО (, #) іноді ще називають сумою за модулем 2, або – додаванням за модулем 2. Дійсно, результат операції Виключне-АБО повністю співпадає з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел: 0  1 = 1 (0 + 1 = 1), хоча 1  1 = 0 (1 + 1 = 10). Виключність назви цієї логічної операції походить з її визначення: результат дорівнює 1, коли тільки одне з вхідних чисел дорівнює 1. При виконанні цієї операції над групою аргументів, результат дорівнює 1, якщо серед аргументів непарна кількість 1, якщо кількість 1 парна , то результат = 0.

4. NOT - машинний код 0111 00xx xxxx xxxx, де xx xxxx xxxx довільна комбінація нулів чи одиниць. Логічна операція НЕ дуже проста: = 1, = 0, тобто - заміна вхідного значення на протилежне. Цю операцію ще називають запереченням або інвертуванням (від англ. inversion – перевертання).

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

Виконання:

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

Мій варіант 4. Мої числа 21 та 24.

0001 0101 0001 0101 – (перше число);

0010 0001 0010 0001 – (друге число).

Перше число я заношу до 13-ї комірки. Друге до комірки під номером 14.

Інструкцію LOAD 13 заношу до комірки під номером 0 (0000 0000 0000).

Інструкцію AND 14 до комірки під номером 1 (0000 0000 0001).

Інструкцію STORE 15 до комірки під номером 2 (0000 0000 0010).

Інструкцію LOAD 13 до комірки під номером 3 (0000 0000 0011).

Інструкцію OR 14 до комірки під номером 4 (0000 0000 0100).

Інструкцію STORE 16 до комірки під номером 5 (0000 0000 0101).

Інструкцію LOAD 13 до комірки під номером 6 (0000 0000 0110).

Інструкцію XOR 14 до комірки під номером 7 (0000 0000 0111).

Інструкцію STORE 17 до комірки під номером 8 (0000 0000 1000).

Інструкцію LOAD 13 до комірки під номером 9 (0000 0000 1001).

Інструкцію NOT до комірки під номером 10 (0000 0000 1010).

Інструкцію STORE 18 до комірки під номером 11 (0000 0000 1011).

Інструкцію HALT до комірки під номером 12(0000 0000 1100).

Результат виконання інструкції AND є число 0001 0000 0001 0000 воно знаходиться у 15 – ій комірці пам’яті. При виконанні цієї інструкції Регістр Ознак не міняє свого значення (000).

Результат виконання інструкції OR є число 0001 1110 0001 1110 воно знаходиться у 16 – ій комірці пам’яті. При виконанні цієї інструкції Регістр Ознак не міняє свого значення (000).

Результат виконання інструкції XOR є число 0000 1110 0000 1110 воно знаходиться у 17 – ій комірці пам’яті. При виконанні цієї інструкції Регістр Ознак не міняє свого значення (000).

Результат виконання інструкції NOT є число 1110 1101 1110 1101 воно знаходиться у 18– ій комірці пам’яті. При виконанні цієї інструкції Регістр Ознак набуває наступного значення 010.

  1. Дослідити у потактовому режимі інструкції AND I XOR - для непарних номерів із журналу списку групи, OR та NOT - для парних номерів із списку групи. Виписати результати виконання програми.

Виконання:

  1. Інструкція AND.

Дана інструкція працює з двома операндами. Занесем число 0000 1101 0000 1101 у акумулятор, а число 0010 0001 0010 0001 до 10-ї комірки пам’яті. У першу комірку помістим код інструкції AND 10 (0100 0000 0000 1010). У ЛАІ встановлюємо адресу комірки де знаходиться наша інструкція (0000 0000 0000).

Досліджую інструкції AND I XOR у по тактовому режимі.

Мнемонічний запис

Код, що обробляється

Коментар

1

ЛАІ  РА

0000 0000 0000

вибір адреси інструкції і занесення її до Регістра Адреси

2

Пам(РА)  РД

0100 0000 0000 1010

вибір коду інструкції з РА і занесення його до Регістра Даних

3

РД  РІ

0100 0000 0000 1010

декодування інструкції у Регістрі Інструкцій

4

РІ РА

0000 0000 1010

Передача адреси операнда

5

Пам(РА)  РД

0001 1100 0001 1100

вибір коду другого операнда з РА і занесення його до Регістра Даних

6

А & РД  А

0001 0000 0001 0000

Виконується інструкція AND і результат записується до А

7

АРО

000

Встановлення прапорців ознак

8

ЛАІ + 1  ЛАІ

0000 0000 0001

підготовка адреси нової інструкції

Результат виконання програми є число 0001000000010000 яке буде знаходитись у Акумуляторі. Регістр Ознак не змінює свого значення.

  1. Інструкція XOR.

Дана інструкція працює з двома операндами. Занесем число 0001 0010 0001 0010 у акумулятор, а число 0001 1100 0001 1100 до 10-ї комірки пам’яті. У першу комірку помістим код інструкції XOR 10 (0110 0000 0000 1010). У ЛАІ встановлюємо адресу комірки де знаходиться наша інструкція (0000 0000 0000).

Досліджую інструкції XOR у по тактовому режимі.

Мнемонічний запис

Код, що обробляється

Коментар

1

ЛАІ  РА

0000 0000 0000

вибір адреси інструкції і занесення її до Регістра Адреси

2

Пам(РА)  РД

0100 0000 0000 1010

вибір коду інструкції з РА і занесення його до Регістра Даних

3

РД  РІ

0100 0000 0000 1010

декодування інструкції у Регістрі Інструкцій

4

РІ РА

0000 0000 1010

Передача адреси операнда

5

Пам(РА)  РД

0001 1100 0001 1100

вибір коду другого операнда з РА і занесення його до Регістра Даних

6

А  РД  А

0000 1110 0000 1110

Виконується інструкція XOR і результат записується до А

7

АРО

000

Встановлення прапорців ознак

8

ЛАІ + 1  ЛАІ

0000 0000 0001

підготовка адреси нової інструкції

Результат виконання програми є число 000011100000110 яке буде знаходитись у Акумуляторі. Регістр Ознак не змінює свого значення.

  1. Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11" - для непарних номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи.

Виконання:

Умова задачі:

Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11".

Вхідні дані: у 20 комірці міститься значення числа А (0111 0001 1011 11002), у 22 комірці зберігається змінна S (лічильник пар «11»), у 23 комірці міститься стале число і - одиничка що буде слугувати для збільшення S, у 21 комірці зберігається змінна n початкове значення якої є 0000 0000 0000 0011, вона слугує для виявлення пар одиниць.

Блок схема алгоритму розв’язування завдання:

ні

так

1

1

так

2

ні

Адреса

комірки пам’яті

Код інструкції

(двійковий)

Мнемонічний формат

інструкції

Коментар до груп інструкцій, що відповідають блокам алгоритму програми

0

0000 0000 0001 0101

LOAD 21

Завантаження числа ”n” до акумулятора

1

0100 0000 0001 0100

LOOP1: AND 20

Побітова логічна операція «кон’юкція»

2

0001 0000 0001 1000

STORE 24

Запис модифікованої змінної ”N1” у пам’ять

3

0011 0000 0001 0101

XOR 21

Побітова логічна операція «сума по модулю 2»

4

1001 0000 0000 1010

JZ LOOP2

Якщо у результаті виконання попередньої операції вийшов 0 тобто тригер регістру ознак Z набув значення 1 ми переходим на LOOP2

5

0000 0000 0001 0101

LOAD 21

Завантаження числа ”n” до акумулятора

6

1111 0000 0000 0000

LOOP3: LSL

Логічний зсув уліво

7

0001 0000 0001 0101

STORE 21

запис змінної ”n” до пам’яті

8

1000 0000 0000 0001

JNZ LOOP1

Якщо після зсуву не виникло переповнення тобто с=0 ми переходим на LOOP1

9

0111 1100 0000 0000

HALT

Зупинка виконання програми

10

0000 0000 0001 0110

LOOP2:LOAD 22

Завантаження ”S” до акумулятора

11

0010 0000 0001 0111

ADD 23

Відбувається додавання (збільшення лічильника пар одиниць)

12

0001 0000 0001 0110

STORE 21

запис змінної ”S” до пам’яті

13

0000 0000 0001 0101

LOAD 21

Завантаження числа ”n” до акумулятора

14

1111 1000 0000 0000

ROL

Циклічний зсув вліво

15

1110 0000 0000 0110

JMP LOOP3

Безумовний перехід на LOOP3

Результат виконання (4(0000 0000 0000 0100)) запишеться до 22-ї комірки.

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

Виконання:

Формулювання завдання:

Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 4, виконується інвертування пар "00"

Вхідні дані: у 22 комірці міститься значення числа А (0111 0001 1011 11002), у 23 комірці зберігається змінна n початкове значення якої є 0000 0000 0000 0011, вона слугує для виявлення пар одиниць.Результат запишеться до 22-ї комірки.

Початок

n=3;

Завантажити n в акумулятор

N1=A & n;

M=N1  n

Z=1?

Завантажити A в акумулятор

A=A XOR N

Записати A в пам’ять

Завантажити n в акумулятор

n=ROL n

зсув уліво

n=ROL n

зсув уліво

Записати n в пам’ять

1

c=0?

1

2

так ні

Кінець

Адреса

комірки пам’яті

Код інструкції

(двійковий)

Мнемонічний формат

інструкції

Коментар до груп інструкцій, що відповідають блокам алгоритму програми

0

0000 0000 0001 0110

LOAD 22

Завантаження числа ”А” до акумулятора

1

0111 0000 0000 0000

NOT

Інверсія

2

0001 0000 0001 0110

STORE 22

Запис А

3

0000 0000 0001 0111

LOAD 23

Завантаження числа ”n” до акумулятора

4

0100 0000 0001 0110

LOOP1: AND 22

Побітова логічна операція «кон’юкція»

5

0011 0000 0001 0101

XOR 21

Побітова логічна операція «сума по модулю 2»

6

1001 0000 0000 1111

JZ LOOP2

Якщо у результаті виконання попередньої операції вийшов 0 тобто тригер регістру ознак Z набув значення 1 ми переходим на LOOP2

7

0000 0000 0001 0111

LOAD 23

Завантаження числа ”n” до акумулятора

8

1111 0000 0000 0000

LOOP3: LSL

Логічний зсув уліво

9

0001 0000 0001 0111

STORE 23

запис змінної ”n” до пам’яті

10

1100 0000 0000 0100

JNC LOOP1

Якщо після зсуву не виникло переповнення тобто с=0 ми переходим на LOOP1

11

0000 0000 0001 0110

LOAD 22

Завантаження числа ”А” до акумулятора

12

0111 0000 0000 0000

NOT

Інверсія

13

0001 0000 0001 0110

STORE 22

Запис А

14

0111 1100 0000 0000

HALT

Зупинка виконання програми

15

0000 0000 0001 0110

LOOP2:LOAD 22

Завантаження числа ”А” до акумулятора

16

0110 0000 0001 0111

XOR 23

Побітова логічна операція «сума по модулю 2»

17

0001 0000 0001 0110

STORE 22

Запис А

18

0000 0000 0001 0101

LOAD 23

Завантаження числа ”n” до акумулятора

19

1111 1000 0000 0000

ROL

Циклічний зсув вліво

20

1110 0000 0000 1000

JMP LOOP3

Безумовний перехід на LOOP3

Результатом виконання програми буде число 0111 0111 1011 11112 воно запишеться у 22 комірку.

  1. Розробити алгоритм і написати програму додавання двох від’ємних 16-ти розрядних чисел. Операція виконується у доповняльному коді.

Виконання:

Формулювання завдання:

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

Вхідні дані: два від’ємні числа А і В. А - поміщаю у 20-ту комірку . В – у 21. У 22 комірку занесу одиничку, яку додаватимемо у до числа при переведенні у доповняльний код.

А=-18(-0000 0000 0001 0010)

У доповняльному 1111 1111 1110 1110

В=-28(-0000 0000 0001 1100)

У доповняльному 1111 1111 1110 0100

Блоксхема алгоритму розв’язування задачі:

Початок

Завантажити А в акумулятор

Завантажити В в акумулятор

A1=NOT A

A=A1+1

Запис А

В1=NOT B

B=B1+1

Запис B

S=A+B

Запис S

Кінець

У результаті виконання програми відбудеться переповнення розрядної сітки. І цей результат запишеться до 20-ї комірки.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]