4. Порядок виконання експериментів.
Запустіть емулятор.
Експеримент 1. Виконання простих команд завантаження та пересилання даних.
Виконайте наведені нижче приклади програм в потактовому режимі. Зафіксуйте, скільки циклів та тактів займає виконання кожної із програм.
1. Завантаження регістра В числом 3Fh за допомогою команди MVI В, 3Fh
Введіть таку програму:
Адреса комірки ОЗП |
код команди |
Мнемонічний запис команди |
Команда мікропроцесора |
0000 |
06 3F |
MVI B, 3Fh |
3Fh → регістр В |
- |
- |
- |
- |
2. Завантаження регістрової пари DE двобайтним числом 3А76h за допомогою команди MVI R, d8
Введіть таку програму:
Адреса комірки ОЗП |
код команди |
Мнемонічний запис команди |
Команда мікропроцесора |
0000 |
1E 76 |
MVI E, 76h |
76h → регістр E |
0002 |
16 3A |
MVI D, 3Ah |
3Ah→ регістр D |
- |
- |
- |
- |
3. Завантаження комірки пам'яті за адресою 000Bh числом A6h за допомогою команди MVI М, А6h
Задайте початкові значення регістрів H=00; L=0В.
Введіть таку програму:
Адреса комірки ОЗП |
код команди |
Мнемонічний запис команди |
Команда мікропроцесора |
0000 |
21 0B 00 |
LXI H, 000Bh |
000Bh→ регістрову пару H |
0003 |
36 A6 |
MVI М, 0A6h |
0A6h → регістр M, що рівносильне 0A6h → комірка ОЗП за адресою 000Bh |
- |
- |
- |
- |
4. Пересилання даних з одного регістра в інший (наприклад з В в Е) за допомогою команди MОV Е, В
Задайте початкові значення регістра В=55
Введіть таку програму:
Адреса комірки ОЗП |
код команди |
Мнемонічний запис команди |
Команда мікропроцесора |
0000 |
06 55 |
MVI B, 55h |
55h → регістр В |
0000 |
58 |
MОV Е, В |
дані регістру В → регістр Е |
- |
- |
- |
- |
5. Обмін даними між регістрами HL та DE за допомогою команди XCHG. Задайте початкові значення регістрів D=55; E=66; H=07; L=0E.
Введіть таку програму:
Адреса комірки ОЗП |
код команди |
Мнемонічний запис команди |
Команда мікропроцесора |
0000 |
11 66 55 |
LXI D, 5566h |
55h → регістр D; 66h → регістр Е |
0003 |
21 0E 07 |
LXI H, 070Eh |
07h → регістр H; 0Eh → регістр L |
0007 |
EB |
XCHG |
рег. H ↔ рег. D; рег. L ↔ рег. Е |
- |
- |
- |
- |
Зробіть висновки.
Експеримент 2. Створення масиву даних в пам'яті за допомогою команд пересилання даних.
Завдання: Створити в пам'яті масив даних згідно таблиці 2:
Таблиця 2. Завдання на створення масиву чисел в пам’яті
Адреса |
Значення |
Адреса |
Значення |
Адреса |
Значення |
1020h |
ААh |
1024h |
А2h |
1028h |
9Аh |
1021h |
А8h |
1025h |
А0h |
1029h |
98h |
1022h |
А6h |
1026h |
9Еh |
|
|
1023h |
А4h |
1027h |
9Сh |
|
|
Неважко замітити, що послідовність значень являє собою арифметичну прогресію з показником -2. Тому необхідно виконати такі пересилання:
АА-2×і → M(HL+i) для всіх і = 0...10.
Алгоритм програми можна представити в вигляді:
Для написання програми нам потрібні деякі команди, які детальніше будуть розглядатися в наступних лабораторних роботах.
Це арифметичні команди:
INX H - збільшення значення регістрової пари HL на одиницю;
SUI d8 – віднімання від акумулятора A константи d8 з розміщенням результату в акумуляторі A;
CPI d8 - віднімання від акумулятора A константи d8 без розміщенням результату в акумуляторі A;
та команди передачі керування:
JNC addr - перехід на команду програми за адресою addr в випадку, якщо в результаті арифметичних дій встановлено прапорець стану C=1 (був нульовий результат попередніх математичних чи логічних операцій);
JNC addr - умовний перехід на команду програми за адресою addr. Ця команда трибайтова, в другому і третьому байтах записана адреса комірки програмної пам'яті, в якій міститься команда, що буде виконуватись наступною. Якщо C=0 не виконана, то виконується команда, що записана наступною. Умова C=1 може бути виконана, якщо в результаті арифметичних дій над вмістом регістрів загального призначення чи комірки пам'яті було отримано від’ємний результат.
Команда INX H - однобайтова, результат її виконання не впливає на значення прапорців стану.
Спочатку в регістри заносяться початкові дані: спочатку командою XRA A признак переносу в старший байт установлюється в 0 заодно установлюється в 0 і вміст регістру А. Потім в регістр А заноситься константа 0ААh – значення першої комірки майбутнього масиву, а регістрову пару Н заноситься константа 1020h – початкова адреса першої комірки майбутнього масиву. Після чого вміст акумулятора А передається в регістр М, в якості якого завжди виступає комірка пам’яті з адресою, розміщеною в регістровій парі Н. Долі, вміст регістрової пари Н збільшується на 1, тим самим змінюється адреса комірки пам’яті, яка буде виконувати роль регістра М. Таким чином змінюється комірка пам’яті для наступного елемента масиву. Потім, вміст А зменшується на константу 02h, тим самим формується значення вмісту наступного елемента масиву. Це є підготовкою вихідних даних для наступного кроку програми. Для з’ясування кінця формування масиву необхідно порівняти значення вмісту наступного елементу масиву з значення вмісту кінцевого елемента масиву. Якщо значення вмісту наступного елемента масиву не менше значення вмісту кінцевого елемента масиву, то командою умовного переходу передаємо керування на раніше виконану команду, якою вміст акумулятора А передається в регістр М з повторенням вище зазначених дій . Якщо ж значення вмісту наступного елемента масиву менше значення вмісту кінцевого елемента масиву, то в цьому випадку формування заданого масиву завершується.
Занесіть програму в пам'ять та виконайте її.
Адреса комірки ОЗП |
код команди |
Мнемонічний запис команди |
Команда мікропроцесора |
0000 |
AF |
XRA A |
(A) ← 00h; (C) ← 0 |
0001 |
3E AA |
MVI A, 0AAh |
(A) ← 0AAh |
0003 |
21 20 10 |
LXI H,1020h |
(H) ← 10H; (L) ) ← 20h |
0006 |
77 |
MOV M, A |
((HL)) ← (A) |
0007 |
23 |
INX H |
(H) ← (H)+1 |
0008 |
D6 02 |
SUI 02h |
(A) ← (A) – 02h |
000A |
FE 98 |
CPI 98h |
(A) – 98h |
000C |
D2 05 00 |
JNC 0006h |
якщо (C) = 0 то (PC) ← 0006h |
000F |
00 |
NOP |
|
Перевірте значення комірок пам'яті починаючи з адреси 1020h.
Запишіть значення комірок. Зробити висновок.
Висновок: На даній лабораторній роботі ми навчилися створювати програми з командами пересилання даних.
