Материал: звіт лаб4

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

A

1110 1011 1110 1011

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

7

АРО

0 1 0

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

8

ЛАІ + 1 ЛАІ

0000 0000 0001

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

  1. Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "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

Зупинка процесора

  1. Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 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

Зупинка процесора

  1. Розробити алгоритм і написати програму додавання двох від’ємних 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.