Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб3.doc
Скачиваний:
6
Добавлен:
22.07.2019
Размер:
196.1 Кб
Скачать

1.2. Організація програмних циклів

Для організації циклу засобами навчального комп’ютера DeComp в одній з комірок пам’яті необхідно розмістити лічильник циклів. Лічильник циклів це число, яке може мати значення N (якесь число) або 0 (const = N або const = 0). Відповідно, у циклі необхідно кожний раз лічильник зменшувати (або збільшувати) на 1 і за допомогою інструкції умовного переходу перевіряти, чи потрібно зробити цикл ще раз.

Наприклад, у комірці пам’яті за адресою 1010 розміщений лічильник - const = K = 15, у комірці пам’яті за адресою 1110 – константа = 1 (const = 1), яка буде обслуговувати цей лічильник. Тоді програма обслуговування циклу:

LOOP 1: . . . – мітка (адреса) попередньої частини програми;

LOAD 10 - вибрати значення з комірки 10 і розмістити його у акумуляторі;

SUB 11 - із значення, що є у акумуляторі, відняти 1;

JNZ LOOP 1 – перехід на LOOP 1, якщо у результаті виконання попередньої

операції ознака Z ≠ 0, тобто вміст акумулятора не дорівнює 0,

інакше – перехід на наступну aдресу – LOOP 2.

LOOP 2 . . . .

Це є лічильник "на 0", тобто процедура LOOP 1 виконується K = 15 разів і кожний раз виконується перевірка числа таких виконань шляхом зменшення значення у лічильнику (комірка пам’яті – 10). Коли у лічильнику значення стане рівним 0, програма почне виконувати процедуру LOOP 2.

1.3. Особливості виконання операцій зсуву

- LSL, LSR - логічні зсуви (розряд, що виходить за межі аккумулятора, потрапляє у ознаку

переносу С).

- ASL, ASR - арифметичні зсуви (не змінюється знак. У ознаку переносу розряд потрапляє

не зі старшого, тобто - знакового розряду, а з попереднього - старшого розряду

числа).

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

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

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

  1. Вивчити теоретичні відомостями до лабораторної роботи № 3.

  2. Дослідити у потактовому режимі інструкції ROL, RCL. JP - для непарних номерів із списку групи, ROR, RCR, JC - для парних номерів із списку групи. Виписати результати та значення прапорців ознак.

Виконання:

Мій номер 11.

  1. Інструкція ROL - циклічний зсув уліво значення що знаходиться у акумуляторі. Її код 1111 100х хххх хххх, де ххх це довільна комбінація нулів або одиниць.

До акумулятора заносим 5734410(1110 0000 0000 00002). До комірки за адресою 0(0000 0000 0000 заносим значення інструкції ROL (1111 1000 0000 0000).У ЛАІ встановлюєм за допомогою набірного поля адресу інструкції ROL (0000 0000 0000).

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

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

Коментар

1

ЛАІ  РА

0000 0000 0000

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

2

Пам(РА)  РД

1111 1000 0000 0000

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

3

РД  РІ

1111 1000 0000 0000

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

4

ROL(A)  A

1100 0000 0000 0001

циклічний зсув вліво числа в акумуляторі

5

ZSC(А)  РО

010

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

7

ЛАІ + 1  ЛАІ

0000 0000 0001

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

Результат виконання програми число 1100 0000 0000 00012 (4915310) що знаходиться у Акумуляторі. У РО значення тригера S встановлюється 1. У результаті виконання відбувається переповнення розрядної сітки, тим не менше тригер С не змінює свого значення, а до молодшого розряду додається 1.

  1. Інструкція JP - циклічний зсув уліво значення що знаходиться у акумуляторі. Її код 1111 110х хххх хххх, де ххх це довільна комбінація нулів або одиниць.

До акумулятора заносим 5734410(1110 0000 0000 00002). До комірки за адресою 0(0000 0000 0000 заносим значення інструкції RCL (1111 1100 0000 0000). У ЛАІ встановлюєм за допомогою набірного поля адресу інструкції RCL (0000 0000 0000).

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

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

Коментар

1

ЛАІ  РА

0000 0000 0000

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

2

Пам(РА)  РД

1111 1100 0000 0000

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

3

РД  РІ

1111 1100 0000 0000

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

4

RCL(A)  A

1100 0000 0000 0000

циклічний зсув вліво числа в акумуляторі

5

ZSC(А)  РО

011

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

7

ЛАІ + 1  ЛАІ

0000 0000 0001

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

Результат виконання програми число 1100 0000 0000 00002 (4915210) що знаходиться у Акумуляторі. У РО значення тригера S i C встановлюється 1. У результаті виконання відбувається переповнення розрядної сітки, тригер С змінює своє значення. Тут до молодшого розряду при переповненні не додається 1 на відміну від інструкції ROL.

  1. Інструкція JP - Умовний перехід на ADR, якщо S=0. Її код 1010 хххх хххх хххх, де хххх – це адреса інструкції яку потрібно виконати у випадку коли умова здійснюється.

До комірки за адресою 0(0000 0000 1010 заносим значення інструкції RCL (1010 0000 0000 1111). У ЛАІ встановлюєм за допомогою набірного поля адресу інструкції RCL (0000 0000 1010).

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

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

Коментар

1

ЛАІ ® РА

0000 0000 1010

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

2

Пам(РА) ® РД

1010 0000 0000 1111

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

3

РД ® РІ

1010 0000 0000 1111

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

4

РІ ® ЛAІ

0000 0000 1100

Занесення нової адреси в ЛАІ і підготовка інструкції, що розміщена за цією адресою

В результаті виконання цієї інструкції відбудеться перехід за адресою 0000 0000 11112. Буде здійснено непрямий порядок виконання інструкцій. Значення РО не змінюється.

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

if (a = b)

с=a + b;

else

c=b;

Змінна a знаходиться у 1010 комірці, змінна b – у 1110, а змінна c – у 1210

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

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

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

інструкції

Коментар

0000 0000 0000

0000 0000 0000 1010

LOAD 10;

завантажити до акумулятора змінну a

0000 0000 0001

0011 0000 0000 1011

SUB 11;

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

0000 0000 0010

1001 0000 0000 0110

JZ 06;

якщо Z = 1 (a=b), перейти до c:=b

0000 0000 0011

0000 0000 0000 1011

LOAD 11;

завантажити до акумулятора змінну b

0000 0000 0100

0001 0000 0000 1100

STORE 12;

записати змінну b на місце змінної c

0000 0000 0101

0111 1100 0000 0000

HALT;

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

0000 0000 0110

0000 0000 0000 1010

LOAD 10;

завантажити до акумулятора змінну a

0000 0000 0111

0010 0000 0000 1011

ADD 11;

Додати а+в і записати до акумулятора

0000 0000 1000

0001 0000 0000 1100

STORE 12

На місце змінної с запишеться значення акумулятора, тобто суми а+в

0000 0000 1001

0111 1100 0000 0000

HALT;

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

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

Виконання:

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

Вхідні дані: у 12 комірці міститься початкове, та подальше змінене, значення змінної А (0101 0111 1101 010112), у 13 комірці зберігається змінна S (лічильник «0»), у 14 комірці міститься одиничка що буде слугувати для збільшення n, у 15 комірці зберігається значення n (кількість не перевірених на одиницю розрядів).

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

Адреса

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

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

(двійковий)

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

інструкції

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

0

0000 0000 0000 1100

LOOP1:LOAD 12

Завантаження змінної ”A” до акумулятора

1

1111 1110 0000 0000

RCR

Циклічний зсув вправо через С

2

0001 0000 0000 1100

STORE 12

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

3

1101 0000 0000 0111

JC LOOP 2

Якщо С=0 (молодший біт змінної ”A” (12) вийшов за межі розрядної сітки акумулятора), то виконується наступні три інструкції (збільшення ”S” на одиницю) в іншому разі, коли С=0 (молодший біт змінної ”A” рівний 02) ці інструкції оминаються – відбувається перехід на комірку за адресою 710

4

0000 0000 0000 1101

LOAD 13

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

5

0010 0000 0000 1110

ADD 14

Збільшення ”S” на одиницю: підрахунок кількості одиниць в змінній ”A”

6

0001 0000 0000 1101

STORE 13

Збереження ”S” в пам’яті ЕОМ

7

0000 0000 0000 1111

LOOP 2:LOAD 15

Завантаження змінної ”n” до акумулятора

8

0011 0000 0000 1110

SUB 14

Зменшити ”n” на одиницю: зміна параметрів циклу.

9

0001 0000 0000 1111

STORE 15

Збереження ”n” в пам’яті ЕОМ

10

1000 0000 0000 0000

JNZ LOOP 1

Перевірка умови виконання циклу. Якщо в результат зміни параметрів циклу Z=0 тоді виконується наступна команда (зупинка процесора), в іншому випадку відбувається перехід на комірку за адресою 02

11

0111 1100 0000 0000

HALT

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

Результат виконання програми запишеться у 13 комірку.

Висновки: При виконанні даниої роботи я засвоїв основні інструкції зсуву та переходу у системі команд навчального комп'ютера DeComp. Також я засвоїв як правильно організовувати цикли у програмі DeComp.