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

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

Інструкція rcl

Циклічний зсув вліво ( розряди обертаються, потрапляючи у ознаку переносу С).

Виконаємо підготовку. В акумулятор внесемо число 110, в комірку №0 інструкцію RCL (двійковий код 1111 1100 0000 0000), в ЛАІ занесемо адресу 0-ї комірки пам’яті, де знаходиться наша інструкція.

Дослідження інструкції RCL:

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

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

Коментар

1

ЛАІ→РА

0000 0000 0000

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

2

РА→РД

1111 1100 0000 0000

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

3

РД→РІ

1111 1100 0000 0000

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

4

А→А

0000 0000 0000 0000

Запис результату в Акумулятор, після циклічного зсуву вліво через C

5

А→РО

101

Перевірка результату в Регістрі Ознак і встановлення прапорців

В даному випадку у Регістрі ознак 1 набуло значення С. Це і є наслідком виконання інструкції циклічного зсуву RCL.

Інструкція jp

Умовний перехід на певну комірку, якщо число у акумуляторі додатнє (S=0).

Виконаємо підготовку. В Акумулятор внесемо число 010 в комірку пам'яті за адресою 0 інструкцію віднімання від акумулятора числа з 4 комірки(двійковий код 0011 0000 0000 0100), в комірці 1 – умовний перехід JP (двійковий код 1010 0000 0000 0000), в 4 комірку число 510, а в ЛАІ ввести адресу першої інструкції, тобто 0000 0000 0000

Дослідження інструкції JP:

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

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

Коментар

1

ЛАІ→РА

0000 0000 0000

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

2

РА→РД

0011 0000 0000 0100

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

3

РД→РІ

1111 1100 0000 0000

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

4

РІ→РА

0000 0000 0100

Вибір адреси операнда

5

РА→РД

0000 0000 0000 0101

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

6

А - РД→А

1111 1111 1111 1011

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

7

А→РО

011

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

8

ЛАІ + 1 →ЛАІ

0000 0000 0001

Вибір адреси наступної інструкції

9

ЛАІ→РА

0000 0000 0001

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

10

РА→РД

1010 0000 0000 0000

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

11

РД→РІ

1010 0000 0000 0000

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

12

ЛАІ + 1 →ЛАІ

0000 0000 0010

Якщо S=0, то перехід на 0 адресу, якщо ні – подальше виконання інструкцій

В даному випадку у Регістрі ознак 1 набуло значення S. Це і є умовою виконання інструкції умовного переходу JP.

Скласти програму, яка буде реалізувати оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі, Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок.

Виконання:

Якщо а > b, то с := a – b, інакше c := a + b;

Змінна а знаходиться в 11-й комірці, змінна b – в 12-й, а змінна с збережеться в 13-й.

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

Двійковий код інструкції

Мнемонічний запис інструкції

Коментар

0000 0000 0000 0000

0000 0000 0000 1011

LOAD 11

Завантажити до А змінну а

0000 0000 0000 0001

0011 0000 0000 1100

SUB 12

Відняти від змінної а змінну b

0000 0000 0000 0010

1100 0000 0000 0111

JNC 7

Якщо С = 1 (a < b), то перейти до c := a + b

0000 0000 0000 0011

0000 0000 0000 1011

LOAD 11

Завантажити до А змінну а

0000 0000 0000 0100

0010 0000 0000 1100

ADD 12

Додати до змінної а змінну b

0000 0000 0000 0101

0001 0000 0000 1101

STORE 13

Зберегти результат (змінну с)

0000 0000 0000 0110

0111 1100 0000 0000

HALT

Зупинити програму

0000 0000 0000 0111

0000 0000 0000 1011

LOAD 11

Завантажити до А змінну а

0000 0000 0000 1000

0011 0000 0000 1100

SUB 12

Відняти від змінної а змінну b

0000 0000 0000 1001

0001 0000 0000 1101

STORE 13

Зберегти результат (змінну с)

0000 0000 0000 1010

0111 1100 0000 0000

HALT

Зупинити програму

Блок-схема програми:

Для того щоб перевірити умову а > b, я виконую віднімання чисел ( а – b ) і перевіряю значення прапорця С за допомогою інструкції JNC. Якщо а > b, то при відніманні ми отримаємо додатне значення, прапорець С не активується і програма виконає віднімання чисел і збереження результату. Якщо а < b, то при відніманні відбудеться переповнення розрядної сітки і прапорець С активується. Тоді виконається додавання чисел і збереження результату.

Дослідження в по кроковому режимі:

Для дослідження дам значення змінним а та b і занесу їх значення до комірок 11 та 12. Нехай а = 610, b = 810. Так як a < b, в результаті ми маємо отримати суму цих чисел, тобто 1410.

610 = 1102;

810 = 10002;

1410 = 11102;

Крок

РА

РД

А

РІ

ЛАІ

РО

1-й

0000 0000 1011

0000 0000 0000 0110

0000 0000 0000 0110

0000 0000 0000 1011

0000 0000 0001

000

2-й

0000 0000 1100

0000 0000 0000 1000

1111 1111 1111 1110

0011 0000 0000 1100

0000 0000 0010

011

3-й

0000 0000 0010

1100 0000 0000 0111

1111 1111 1111 1110

1100 0000 0000 0111

0000 0000 0011

011

4-й

0000 0000 1011

0000 0000 0000 0110

0000 0000 0000 0110

0000 0000 0000 1011

0000 0000 0100

011

5-й

0000 0000 1100

0000 0000 0000 1000

0000 0000 0000 1110

0010 0000 0000 1100

0000 0000 0101

000

6-й

0000 0000 1101

0000 0000 0000 1110

0000 0000 0000 1110

0001 0000 0000 1101

0000 0000 0110

000

7-й

0000 0000 0110

0111 1100 0000 0000

0000 0000 0000 1110

0111 1100 0000 0000

0000 0000 0110

000

Отже, як можемо побачити, в результаті роботи програми значення акумулятора відповідає сумі двох цих чисел а і b. Тобто, в даному випадку програма спрацювала правильно.

Тепер перевіримо, що буде якщо ми поміняємо значення змінних місцями. Тобто а = 810, b = 610. Так як число а більше числа b, в результаті ми маємо отримати їх різницю, тобто, число 210

210 = 102;

Крок

РА

РД

А

РІ

ЛАІ

РО

1-й

0000 0000 1011

0000 0000 0000 1000

0000 0000 0000 1000

0000 0000 0000 1011

0000 0000 0001

000

2-й

0000 0000 1100

0000 0000 0000 0110

0000 0000 0000 0010

0011 0000 0000 1100

0000 0000 0010

000

3-й

0000 0000 0010

1100 0000 0000 0111

0000 0000 0000 0010

1100 0000 0000 0111

0000 0000 0111

000

4-й

0000 0000 1011

0000 0000 0000 1000

0000 0000 0000 1000

0000 0000 0000 1011

0000 0000 1000

000

5-й

0000 0000 1100

0000 0000 0000 0110

0000 0000 0000 0010

0011 0000 0000 1100

0000 0000 1001

000

6-й

0000 0000 1101

0000 0000 0000 0010

0000 0000 0000 0010

0001 0000 0000 1101

0000 0000 1010

000

7-й

0000 0000 1010

0111 1100 0000 0000

0000 0000 0000 0010

0111 1100 0000 0000

0000 0000 1010

000

Источник: https://studfile.net/preview/14570881/