2) Дослідження інструкції NOT:
А) А Число 0001 0100 0001 01002. (Записую число 2010, використавши всі 4 тетради 16-ти розрядного формату);
Б) Adr.0 0111 0000 0000 00002. (Інструкція NOT);
В) ЛАІ Adr 0.
|
№ |
Мнемонічний запис |
Код, що обробляється |
Коментар |
|
1 |
ЛАІ РА |
0000 0000 0000 |
вибір адреси інструкції і занесення її до Регістра Адреси |
|
2 |
Пам(РА) РД |
0111 0000 0000 0000 |
вибір коду інструкції з РА і занесення його до Регістра Даних |
|
3 |
РД РІ |
0111 0000 0000 0000 |
декодування інструкції у Регістрі Інструкцій |
|
4 |
|
1110 1011 1110 1011 |
Виконується інструкція NOT і результат записується до Акумулятора |
|
7 |
АРО |
0 1 0 |
Встановлення прапорців ознак |
|
8 |
ЛАІ + 1 ЛАІ |
0000 0000 0001 |
підготовка адреси нової інструкції |
Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11" - для непарних номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи.
(Рис.1)Блок-схема алгоритму до завдання 4
Задане число А міститься в 20-тій комірці. Число В – лічильник пар нулів в числі А, міститься в 21-ій комірці. Число k – прапорець для перевірки наявності пар цифр в числі А, міститься в 22-ій комірці, k = 8. В комірці 23 записано число 1.
В комірці 25 записано число 310 (двіковий код цього числа: 00112, тому, використовуючи його, легко дослідити число на пару 00).
Пишу програму:
|
№і |
Двійковий код інструкції |
Мнемонічний формат інструкції |
Коментар до груп інструкцій, що відповідають блокам алгоритму програми |
|
1 |
0000 0000 0001 0100 |
LOAD 20 |
Використовую інструкцію AND для того, щоб перевірити, чи дорівнюють два молодші розряди 0 |
|
2 |
0100 0000 0001 1001 |
AND 25 |
|
|
3 |
1001 0000 0000 0111 |
JZ 7 |
|
|
4 |
0011 0000 0000 1110 |
LOAD 21 |
Збільшую змінну лічильника на 1, якщо цифри дорівнюють 0, якщо ні, то цей блок інструкцій не виконується |
|
5 |
0010 0000 0001 0111 |
ADD 23 |
|
|
6 |
0001 0000 0001 0101 |
STORE 21 |
|
|
7 |
0000 0000 0000 1100 |
LOAD 20 |
Подвійний зсув числа вправо для перевірки двох наступних розрядів числа. |
|
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 |
Зупинка процесора |
Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 4, виконується інвертування пар "11" - для парних номерів із списку групи і інвертування пар "00" - для непарних номерів із списку групи.

(Рис.2)Загальна блок-схема алгоритму до 5 завдання
Задане число А міститься в 20-тій комірці. Число В – лічильник пар нулів в числі А, міститься в 21-ій комірці. Число k – прапорець для перевірки наявності пар цифр в числі А, міститься в 22-ій комірці, k = 8. В комірці 23 записано число 1.
В комірці 25 записано число 310 (двіковий код цього числа: 00112, тому, використовуючи його, легко дослідити число на пару 00).
Пишу програму:
|
№і |
Двійковий код інструкції |
Мнемонічний формат інструкції |
Коментар до груп інструкцій, що відповідають блокам алгоритму програми |
|
1 |
0000 0000 0001 0100 |
LOAD 20 |
Почергово використовую інструкцію AND і SUB для того, щоб перевірити, чи дорівнюють цифри двох молодших розрядів 1. |
|
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 |
Якщо цифри дорівнюють одиниці, встановлюю два молодші розряди числа рівними 0. Якщо цифри дорівнюють 0, то цей блок не виконується. |
|
6 |
0011 0000 0001 1001 |
SUB 25 |
|
|
7 |
1111 1110 0000 0000 |
ROR |
Встановити старшими розрядами дві наступні цифри числа і записати його в 20 комірку.
|
|
8 |
1111 1110 0000 0000 |
ROR |
|
|
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 |
Завантаження числа до акумулятора |
|
15 |
0111 1100 0000 0000 |
HALT |
Зупинка процесора |
Розробити алгоритм і написати програму додавання двох від’ємних 16-ти розрядних чисел. Операція виконується у доповняльному коді.
Блок-схема алгоритму:
Пишу програму, занісши дані в 16-ту та 17-ту комірки:
|
Адр. комірки пам’яті у десятковому коді |
Код інструкції |
Мнемонічний формат інструкції |
Коментарі інструкцій. |
|
0 |
0000 0000 0001 0000 |
LOAD 16 |
Переведення в доповняльний код 1-го числа |
|
1 |
0111 0000 0000 0000 |
NOT |
|
|
2 |
0010 0000 0000 1101 |
ADD 13 |
|
|
3 |
0001 0000 0001 0000 |
STORE 16 |
|
|
4 |
0000 0000 0001 0001 |
LOAD 17 |
Переведення в доповняльний код 2-го числа |
|
5 |
0111 0000 0000 0000 |
NOT |
|
|
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.