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

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

Кінець

Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті:

Вхідними даними будуть числа A та B, які розташовуватимуться у 27-ій та 28-ій комірках пам’яті відповідно. Змінна А дорівнює десятковому числу 1010, яке у модифікованому доповняльному коді дорівнює 0000 0000 0000 10102. Змінна B дорівнює десятковому числу -910, яке у модифікованому доповняльному коді дорівнює 1100 0000 0000 10012.

Призначення комірок що використовуються:

Для роботи програми використовується 29-а, 30-а, 31-а, 32-а комірка пам’яті. У 29-ій комірці записано двійковий код десяткового числа 110, що необхідна для зменшення лічильника циклу, та інкременту лічильника кількості одиниць у вхідному двійковому числі. У 30-ій комірці записано двійковий код 1100 0000 0000 00002. Це маска, що призначена для визначення знаку числа. У 31-ій комірці записано двійковий код десяткового числа 010, для збереження результату додавання. У 32-ій комірці записано двійковий код 1111 1111 1111 11112. Це ознака неправильного результату.

Текст програми:

Адреса комірки пам’яті

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

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

інструкції

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

0

0000 0000 0001 1011

LOAD 27;

Додаємо вміст 3110 комірки в якій записано 010 ,для того щоб перевірити чи від’ємне це число.

1

0010 0000 0001 1111

ADD 31;

2

1010 0000 0000 0111

JP 7;

Перевірка знаку першого доданка “А”, якщо S = 0, то операція доповнення пропускається.

3

0110 0000 0001 1110

XOR 30;

Переведення першого доданка “А” з прямого модифікованого коду в доповняльний модифікований.

4

0111 0000 0000 0000

NOT;

5

0010 0000 0001 1101

ADD 29;

6

0001 0000 0001 1011

STORE 27;

7

0000 0000 0001 1100

LOAD 28;

Додаємо вміст 3110 комірки в якій записано 010 ,для того щоб перевірити чи від’ємне це число.

8

0010 0000 0001 1111

ADD 31;

9

1010 0000 0000 1110

JP 14;

Перевірка знаку другого доданка “В”, якщо S = 0,то операція доповнення пропускається.

10

0110 0000 0001 1110

XOR 30;

Переведення другого доданка “В” з прямого модифікованого коду в доповняльний модифікований.

11

0111 0000 0000 0000

NOT;

12

0010 0000 0001 1101

ADD 29;

13

0001 0000 0001 1100

STORE 28;

14

0000 0000 0001 1011

LOAD 27;

Додати до вмісту 2710 комірки нього вміст 2810.

15

0010 0000 0001 1100

ADD 28;

16

0001 0000 0001 1100

STORE 28;

17

1100 0000 0001 0100

JNC 21;

Перевірка результату на переповнення розрядної сітки.

18

0000 0000 0010 0000

LOAD 32;

Перехід на кінець виконання програми. Результат не коректний.

19

0000 0000 0001 1111

STORE 31;

20

0000 0000 0001 1010

JMP 26;

21

0101 0000 0001 1010

JP 26;

Перевірка чи результат додавання невід’ємне число тобто S = 0. Якщо так, то перетворення суми у прямий код пропускається.

22

0111 0000 0000 0000

NOT;

Перетворення результату суми у прямий код.

23

0010 0000 0001 1101

ADD 29;

24

0110 0000 0001 1110

XOR 30;

25

0001 1100 0001 1111

STORE 31;

26

0111 1100 0000 0000

HALT;

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

  1. Виконати дослідження програми, розробленої у пункті 2, у покроковому режимі.

Результат дослідження

РА

РД

А

РІ

ЛАІ

РО

1

0000 0001 0111

0000 0000 0000 1010

0000 0000 0000 1010

0000 0000 0001 0111

0000 0000 0001

000

2

0000 0001 1011

0000 0000 0000 0000

0000 0000 0000 1010

0010 0000 0001 1011

0000 0000 0010

000

3

0000 0000 0010

1010 0000 0000 0111

0000 0000 0000 1010

1010 0000 0000 0111

0000 0000 0111

000

4

0000 0001 1000

1100 0000 0000 1001

1100 0000 0000 1001

0000 0000 0001 1000

0000 0000 0001

000

5

0000 0001 1011

0000 0000 0000 0000

11000 0000 0000 1001

00010 0000 0001 1011

0000 0000 1001

010

6

0000 0000 1001

1010 0000 0000 1110

1100 0000 0000 1001

1010 0000 0000 1110

0000 0000 1010

010

7

0000 0001 1010

1100 0000 0000 0000

0000 0000 0000 1001

0110 0000 0001 1010

0000 0000 1011

000

8

0000 0000 1011

0111 0000 0000 0000

1111 1111 1111 0110

0111 0000 0000 000

0000 0000 1100

010

9

0000 0001 1001

0000 0000 0000 0001

1111 1111 1111 0111

0010 0000 0001 1001

0000 0000 1101

010

10

0000 0001 1000

1111 1111 1111 0111

1111 1111 1111 0111

0001 0000 0001 1000

0000 0000 1110

010

11

0000 0001 0111

0000 0000 0000 1010

0000 0000 0000 1010

0000 0000 0001 0111

0000 0000 1111

010

12

0000 0001 1000

1111 1111 1111 0111

0000 0000 0000 0001

0010 0000 0001 1000

0000 0001 0000

001

13

0000 0001 1100

0000 0000 0000 0001

0000 0000 0000 0001

0001 0000 0001 1100

0000 0001 0001

001

14

0000 0001 0110

0111 1100 0000 0000

0111 1100 0000 0001

0101 0000 0001 0110

0000 0001 0010

001

15

0000 0001 0010

0111 0000 0000 0000

1000 0011 1111 1110

0111 0000 0000 0000

0000 0001 0011

010

Після виконання програми значення 28-ої комірки змінилось на 1111 1111 1111 01112, тобто число В у доповняльному модифікованому коді, в комірці 31 встановилось значення

0000 0000 0000 00012, тобто двійковий результат додавання десяткових чисел 1010 і -910.

4. Розробити алгоритм і написати програму множення довільних двійкових чисел без знаку.

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

Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті:

Вхідними даними будуть числа A і B, які розташовуватимуться у 20-ій і 21-ій комірках пам’яті відповідно. Змінна А є множеним і дорівнює десятковому числу 12210, яке у двійковому поданні дорівнює 0000 0000 0111 10102. Змінна B є множником і дорівнює десятковому числу 4310, яке у двійковому поданні дорівнює 0000 0000 0010 10112.

Призначення комірок що використовуються:

Для роботи програми використовується 22-а, 23-а, 24-а комірка пам’яті. У 24-ій комірці записано двійковий код десяткового числа 110, що необхідна для зменшення лічильника циклу, а також для інкременту лічильника кількості одиниць у вхідному числі. У 23-ій комірці записано двійковий код 0000 0000 0001 00002, що відіграє роль лічильника циклів. У 22-ій комірці записано двійковий код десяткового числа 010. Ця змінна необхідна для збереження результату множення.

Текст програми:

Адреса

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

Мнемонічний

код

Коментар

0

0000 0000 0001 0100

LOAD 20

Зсув множеного вправо і збереження.

1

1111 1010 0000 0000

ROR

2

0001 0000 0001 0100

STORE 20

3

0000 0000 0001 0101

LOAD 21

Зсув множника вліво через ознаку С і збереження.

4

1111 1100 0000 0000

RCL

5

0001 0000 0001 0101

STORE 20

6

1100 0000 0000 1010

JNC 10

Якщо С = 0, додавання множеного до результату пропускається.

7

0000 0000 0001 0110

LOAD 22

Додавання проміжного доданку до результату.

8

0010 0000 0001 0100

ADD 20

9

0001 0000 0001 0110

STORE 22

10

0000 0000 0001 0111

LOAD 23

Зменшення лічильника циклів на 1.

11

0011 0000 0001 1000

SUB 24

12

0001 0000 0001 0111

STORE 23

13

1000 0000 0000 0000

JNZ 0

Якщо K не 0, то виконується цикл з 0 комірки.

14

0111 1100 0000 0000

HALT

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

  1. Виконати дослідження програми, розробленої у пункті 4, у покроковому режимі.

Програма протягом своєї роботи повертається в початок , таким чином у неї умовні блоки будуть майже аналогічні, відмінність буде лише тоді, коли при зсуві множника 1 потрапляє в ознаку С, тоді крім операцій зсуву множника і множеного буде присутня операція додавання проміжного доданку.