Міністерство освіти і науки, молоді та спорту України
Прикарпатський національний університет
імені Василя Стефаника
Кафедра радіофізики і електроніки
Лабораторна робота №5
Команди умовних та безумовних переходів восьмирозрядного мікропроцесора КР580ВМ80 (Intel 8080).
Івано-Франківськ – 2011
1. Мета роботи
Вивчити основні типи команд умовних та безумовних переходів, основні способи їх застосування, навчитися створювати програми з їх використанням.
2. Обладнання
Програма - емулятор мікропроцесорної системи на базі одно-кристального КР580ВМ80.
3. Короткі відомості з теорії
Широкі можливості мікропроцесора в значній мірі визначаються його здатністю приймати рішення в ході виконання програми у відповідності з отриманим результатом. Для забезпечення таких можливостей використовуються команди умовних та безумовних переходів, які дають змогу міняти послідовність виконання програм. З їх допомогою в програмах влаштовують цикли та розгалуження, тому вони інколи ще називаються командами розгалуження. В попередніх лабораторних роботах деякі з цих команд вже використовувались.
3.1. Загальні властивості команд переходів
Як витікає з їх назви, всі розглядувані команди поділяються на дві групи: безумовних та умовних переходів. Якщо на виконання команд першої групи не впливають результати попередніх обчислень, то виконання команд другої групи здійснюється якраз саме у відповідності з цими результатами.
За винятком команди PCHL, яка є однобайтовою, всі інші є трибайтовими. Це означає, що другий та третій байт команди містять повну 16-розрядну адресу деякої комірки пам'яті. В цій комірці пам'яті записана команда програми, яку необхідно виконати наступною в випадку, якщо задовільняється умова переходу. Перехід здійснюється шляхом запису адреси цієї комірки в лічильник команд PC та передачі керування команді, яка в ній записана. Якщо ж умова не задовільняється, то ніякого переходу не відбувається, а мікропроцесор виконує команду, наступну після команди переходу, тобто лічильник команд збільшує своє значення на 3. Оскільки адреса комірки, де міститься код команди, безпосередньо завантажується в PC, то вважається, що використовується безпосередня адресація. Єдина команда переходу, що використовує регістрову адресацію є однобайтова команда PCHL. Необхідно звернути увагу на те, що в другому байті команди міститься молодший байт адреси, а в третьому - старший. Тому, наприклад, команда JMP A7, 00 означає перехід за адресою 00А7h.
Слід пам'ятати, що після виконання команди переходу не залишається жодних даних про те, з якої точки програми було здійснено цей перехід, тому всі умовні та безумовні переходи необхідно застосовувати якомога рідше, оскільки наявність великої кількості галужень програми сильно ускладнює її написання та відлаштування.
3.2. Команди безумовного переходу
Під час виконання цих команд ніякі перевірки не здійснюються. В лічильник команд мікропроцесора автоматично завантажується значення другого та третього байту команди, і починається виконання команди за цією адресою. Команди безумовного переходу відрізняються від усіх команд переходів тим, що їх можна розглядати також як команди завантаження 16-розрядного регістра РС.
Команди безумовного переходу використовують в тому випадку, якщо необхідно здійснити перехід на чітко визначену команду програми, а також для зв'язування різних частин програми. Інколи їх використовують під час написання та відлаштування програми для переходів з так званих "заготовок" та "заглушок".
За допомогою команд безумовного переходу реалізують оператори типу GOTO мов високого рівня. Оскільки велика кількість безумовних переходів негативно відображається на надійності та "читабельності" програм, слід обмежувати використання команд такого виду.
В мікропроцесорі КР580ВМ80 передбачено 2 команди безумовного переходу:
1
Безумовний перехід
2
безпосередня
3
JMP B2, B3
4
B3 B2 → PC
5
C3h
303q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2).
8
Виконання команди не впливає на регістр стану.
1
Завантаження лічильника команд PC (непрямий перехід)
2
регістрова / регістрова
3
PCHL
4
HL → PC
5
E9h
351q
6
Команда займає 1 байт пам'яті, виконується за 1 цикл, 5 тактів.
7
Під час виконання команди дані, які містяться в регістрі L пересилаються в молодший байт лічильника команд РС, а дані, які містяться в регістрі H - в старший байт. Керування передається команді, яка буде занесена в PC (за адресою B3 B2).
8
Виконання команди не впливає на регістр стану.
3.3. Команди умовних переходів
На виконання всіх команд умовних переходів впливає значення окремих прапорців регістру стану, однак використовуються не всі прапорці. Наприклад, прапорець додаткового перенесення не впливає на жодну із команд переходу. Кожен прапорець може бути встановлений в одне із двох значень, тому всього команд умовного переходу є 8.
Всі команди умовного переходу мають такий формат: якщо умова виконується, то перейти на вказану адресу, якщо ні - виконувати наступну команду програми.
Команди ПЕРЕХІД, ЯКЩО НУЛЬ та ПЕРЕХІД, ЯКЩО НЕ НУЛЬ перевіряють значення прапорця нуля. Якщо його значення рівне 1, то це свідчить, що в результаті попередньої дії було набуто нульовий результат. Тому в результаті виконання команди ПЕРЕХІД, ЯКЩО НУЛЬ буде здійснено перехід за адресою, яка міститься в другому та третьому байтах програми, а в випадку нульового значення прапорця такий перехід здійснено не буде. Якщо прапорець встановлено в 0, то навпаки, команда ПЕРЕХІД, ЯКЩО НЕ НУЛЬ буде виконуватись з переходом, а команда ПЕРЕХІД, ЯКЩО НУЛЬ - без.
Команду ПЕРЕХІД, ЯКЩО НУЛЬ часом називають командою ПЕРЕХІД, ЯКЩО РІВНЕ. Таку назву команда отримала тому, що її часто застосовують одразу ж після команди ПОРІВНЯННЯ. Якщо два числа, що порівнюються, рівні між собою, то прапорець нуля встановлюється в 1 (див. виконання команд СМР або СРІ, лабораторна робота №4). В такому випадку в програмі буде здійснено перехід. Аналогічно, команду ПЕРЕХІД, ЯКЩО НЕ НУЛЬ можна вважати командою ПЕРЕХІД, ЯКЩО НЕ РІВНЕ.
1
Перехід, якщо результат нуль
2
безпосередня
3
JZ B2, B3
4
B3 B2 → PC
5
CAh
312q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець нуля встановлено в 1, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець нуля встановлено в 0, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
1
Перехід, якщо результат не нуль
2
безпосередня
3
JNZ B2, B3
4
B3 B2 → PC
5
C2h
302q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець нуля встановлено в 0, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець нуля встановлено в 1, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
Команди ПЕРЕХІД, ЯКЩО ПЕРЕНЕСЕННЯ та ПЕРЕХІД, ЯКЩО НЕМА ПЕРЕНЕСЕННЯ перевіряють значення прапорця перенесення. Якщо його значення рівне 1, то це свідчить, що в результаті попередньої дії появився біт перенесення із старшого 7-го розряду в наступний розряд (або біт запозичення в 7-й розряд). Тому в результаті виконання команди ПЕРЕХІД, ЯКЩО ПЕРЕНЕСЕННЯ буде здійснено перехід за адресою, яка міститься в другому та третьому байтах програми, а в випадку нульового значення прапорця такий перехід здійснено не буде. Якщо прапорець встановлено в 0, то навпаки, команда ПЕРЕХІД, ЯКЩО НЕМА ПЕРЕНЕСЕННЯ буде виконуватись з переходом, а команда ПЕРЕХІД, ЯКЩО ПЕРЕНЕСЕННЯ - без.
Команди ПЕРЕХІД, ЯКЩО ПЕРЕНЕСЕННЯ та ПЕРЕХІД, ЯКЩО НЕМА ПЕРЕНЕСЕННЯ використовують, наприклад, для порівняння двох чисел А та В. Якщо А < В, то в результаті віднімання А - В появиться біт запозичення в старший розряд, і прапорець перенесення буде встановлено в 1. Якщо прапорець перенесення встановиться в 0, то це означає, що А ≥ В. Якщо ж одночасно прапорець нуля рівний 0 (ненульовий результат віднімання) тоді А > В. Таке віднімання можна здійснити за допомогою команди ПОРІВНЯННЯ. (див. виконання команд СМР або СРІ, лабораторна робота №4).
1
Перехід, якщо є перенесення
2
безпосередня
3
JС B2, B3
4
B3 B2 → PC
5
DAh
332q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець перенесення встановлено в 1, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець перенесення встановлено в 0, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
1
Перехід, якщо нема перенесення
2
безпосередня
3
JNС B2, B3
4
B3 B2 → PC
5
D2h
322q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець перенесення встановлено в 0, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець перенесення встановлено в 1, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
Команди ПЕРЕХІД, ЯКЩО МІНУС та ПЕРЕХІД, ЯКЩО ПЛЮС перевіряють значення прапорця знаку. Якщо його значення рівне 1, то це свідчить, що в результаті попередньої дії старший 7-й розряд результату встановлено в 1. В загальному випадку це не означає, що результат - дійсно від'ємне число. Наприклад, результат додавання додатних чисел 01110000b (70h) та 00010000b (10h) є "від'ємне" число 10000000b (80h). Однак, якщо програма оперує з числами, записаними в оберненому та доповненому кодах, 7-й розряд байта результату вказує на знак числа і може бути використаний програмістом. Тому, якщо прапорець знаку встановлено в 1, в результаті виконання команди ПЕРЕХІД, ЯКЩО МІНУС буде здійснено перехід за адресою, яка міститься в другому та третьому байтах програми, а в випадку нульового значення прапорця такий перехід здійснено не буде. Якщо прапорець встановлено в 0, то навпаки, команда ПЕРЕХІД, ЯКЩО ПЛЮС буде виконуватись з переходом, а команда ПЕРЕХІД, ЯКЩО МІНУС - без.
Команди ПЕРЕХІД, ЯКЩО МІНУС та ПЕРЕХІД, ЯКЩО ПЛЮС можна використовувати для порівняння двох чисел А та В тільки в тому випадку, якщо ці числа записані в прямому або оберненому кодах, оскільки в цьому випадку в старшому 7-му розряді додатне число повинно містити 0, а від'ємне - 1.
1
Перехід, якщо результат від'ємний
2
безпосередня
3
JМ B2, B3
4
B3 B2 → PC
5
F2h
372q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець знаку встановлено в 1, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець знаку встановлено в 0, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
1
Перехід, якщо результат додатній
2
безпосередня
3
JР B2, B3
4
B3 B2 → PC
5
FAh
362q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець знаку встановлено в 0, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець знаку встановлено в 1, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
Команди ПЕРЕХІД, ЯКЩО ПАРНІСТЬ та ПЕРЕХІД, ЯКЩО НЕ ПАРНІСТЬ перевіряють значення прапорця парності. Якщо його значення рівне 1, то це свідчить, що в результат попередньої дії має парну кількість розрядів, встановлених в 1. Тому в результаті виконання команди ПЕРЕХІД, ЯКЩО ПАРНІСТЬ буде здійснено перехід за адресою, яка міститься в другому та третьому байтах програми, а в випадку нульового значення прапорця такий перехід здійснено не буде. Якщо прапорець встановлено в 0, то навпаки, команда ПЕРЕХІД, ЯКЩО НЕ ПАРНІСТЬ буде виконуватись з переходом, а команда ПЕРЕХІД, ЯКЩО ПАРНІСТЬ - без.
Перевірка на парність використовується для виявлення помилок під час передавання чи приймання даних через зовнішній порт. В такому випадку, після передавання даних обов'язково передається так звана контрольна сума, а в спрощеному варіанті - біт парності. Цей біт встановлюється таким чином, щоб загальна сума одиниць в усіх байтах повідомлення, включаючи біт парності була парна. Якщо пристрій - приймач виявить непарну кількість бітів, то це свідчить про помилку передавання. Таким чином перевірку на парність можна використовувати, здійснюючи введення даних з накопичувачів чи мережі.
1
Перехід, якщо результат парний
2
безпосередня
3
JРЕ B2, B3
4
B3 B2 → PC
5
ЕAh
352q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець парності встановлено в 1, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець парності встановлено в 0, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
1
Перехід, якщо результат не парний
2
безпосередня
3
JРО B2, B3
4
B3 B2 → PC
5
Е2h
342q
6
Команда займає 3 байти пам'яті, виконується за 3 цикли, 10 тактів.
7
Якщо прапорець парності встановлено в 0, то під час виконання команди в молодший байт лічильника команд РС записується другий байт команди B2, а в старший байт РС - третій байт команди B3. Керування передається команді, яка буде занесена в PC (за адресою B3 B2). Якщо прапорець парності встановлено в 1, то керування передається наступній команді.
8
Виконання команди не впливає на регістр стану.
Команди умовних переходів використовуються для реалізації операторів типу:
1. for i=n to m do тіло циклу,
2. if умова then дія1 else дія2,
3. case операнд of значення 1: дія1;
значення 2: дія 2;
..............................
значення n: дія n;
4. repeat тіло циклу until умова,
5. while умова do тіло циклу,
та інших, які використовуються в мовах програмування високого рівня.
4. Порядок виконання експериментів.
Запустіть емулятор.
Виконайте наведені нижче приклади програм в потактовому режимі. Зафіксуйте, скільки циклів та тактів займає виконання кожної із програм. Зафіксуйте значення прапорців після виконання кожної із команд.
Експеримент 1. Вивчення команд безумовного переходу.
1. Вивчення команди безумовного переходу JMP adr.
Введіть таку програму:
Адреса комірки ОЗП
код команди
Мнемонічний запис команди
Команда мікропроцесора
0000
3Е
MVI А, d8
дані наступної комірки ОЗП → регістр А
0001
01
LXI B, d16
дані 01h → регістр А
0002
3C
INR A
A + 1 → регістр A
0003
C3
JMP adr
перехід на адресу 000Аh
0004
0A
LDAX B
молодший байт адреси
0005
00
NOP
старший байт адреси
0006
3D
DCR A
A - 1 → регістр A
0007
47
MOV B, A
A → регістр В
0008
80
ADD B
A + В → регістр A
0009
A0
ANA B
A & В → регістр A
000A
C3
JMP adr
перехід на адресу 0002h
000B
02
STAX B
молодший байт адреси
000C
00
NOP
старший байт адреси
000D
76
HLT
зупинка програми
-
-
-
-
Складіть блок-схему алгоритму програми. Покажіть, які із команд програми будуть виконуватися, а які - ні. За яких умов програма закінчить своє виконання, і який результат буде отримано?
2. Вивчення команди безумовного переходу PCHL.
Введіть таку програму:
Адреса комірки ОЗП
код команди
Мнемонічний запис команди
Команда мікропроцесора
0000
3Е
MVI А, d8
дані наступної комірки ОЗП → регістр А
0001
01
LXI B, d16
дані 01h → регістр А
0002
26
MVI H, d8
дані наступної комірки ОЗП → регістр H
0003
00
NOP
старший байт адреси
0004
2E
MVI L, d8
дані наступної комірки ОЗП → регістр L
0005
0A
LDAX B
молодший байт адреси
0006
3C
INR A
A + 1 → регістр A
0007
E9
PCHL
HL → регістр PC
0008
24
INR H
H + 1 → регістр H
0009
2C
INR L
L + 1 → регістр L
000A
3D
DCR A
A - 1 → регістр A
000B
87
ADD A
A + A → регістр A
000C
C3
JMP adr
перехід на адресу 0002h
000D
02
STAX B
молодший байт адреси
000E
00
NOP
старший байт адреси
000F
76
HLT
зупинка програми
-
-
-
-
Які з команд програми ніколи не будуть виконані? Чим відрізняється командами PCHL від команди JMP adr? Зробіть висновки.
Експеримент 2 Вивчення команд умовного переходу.
1. Вивчення команд умовного переходу JZ adr та JNC adr.
Постановка задачі: В регістрах В та С записані числа, які необхідно порівняти. Після виконання програми в регістрі В повинно бути записане більше число. Якщо числа одинакові, то регістри В та С треба обнулити.
Введіть таку програму:
Адреса комірки ОЗП
код команди
Мнемонічний запис команди
Команда мікропроцесора
0000
78
MOV А, B
B → регістр A
0001
91
SUB C
A - C → регістр A
0002
CA
JZ adr
ПЕРЕХІД, ЯКЩО НУЛЬ на адресу 000Еh
0003
0E
MVI C, d8
молодший байт адреси
0004
00
NOP
старший байт адреси
0005
D2
JNC adr
ПЕРЕХІД, ЯКЩО НЕМА ПЕРЕНЕСЕННЯ на адресу 0011h
0006
11
LXI D, d16
молодший байт адреси
0007
00
NOP
старший байт адреси
0008
78
MOV А, B
B → регістр A
0009
41
MOV B, C
C → регістр B
000A
4F
MOV C, А
A → регістр C
000B
C3
JMP adr
ПЕРЕХІД на адресу 0011h
000C
11
LXI D, d16
молодший байт адреси
000D
00
NOP
старший байт адреси
000E
AF
XRA A
обнулення А
000F
47
MOV B, А
A → регістр В
0010
4F
MOV C, А
A → регістр C
0011
76
HLT
зупинка програми
-
-
-
-
Задайте початкові значення В=50h, С=20h. Запустіть програму на виконання в покроковому режимі. Запишіть значення прапорців стану після виконання команди SUB C. Запишіть всі команди, які будуть виконані наступними. Задайте інші значення регістрів: спочатку В=35h, С=67h, а потім В=33h, С=33h. Запустіть програму для кожного із наборів. Прослідкуйте за значеннями прапорців стану, та послідовністю виконання команд. Складіть блок-схему алгоритму програми. Зробіть висновки.
2. Вивчення команд JPE adr та JPO adr.
Постановка задачі.
5. Контрольні запитання.
1. Яке основне призначення команд безумовних та умовних переходів?
2. Яким чином здійснюються безумовні та умовні переходи на вказану адресу?
3. На які прапорці регістра стану впливає результат виконання команд переходів?
4. Яким чином вказується адреса на яку необхідно перейти?
5. Назвіть основні недоліки команд безумовних та умовних переходів?
6. Вкажіть відмінності між командами PCHL та JMP adr. В яких випадках застосовуються дані команди?
7. Чим відрізняються команди безумовних та умовних переходів між собою?
8. З якою метою використовують команди безумовних переходів?
9. Які прапорці регістру стану використовуються командами умовних переходів?
10. Перерахуйте всі команди умовних переходів? Чому таких команд є вісім? Чи існує команда переходу, яка враховує прапорець додаткового перенесення?
11. З якою метою використовують команди переходу, які залежать від значення прапорця парності?
12. Яким чином здійснюється порівняння чисел в мікропроцесорі КР580ВМ80? Які прапорці стану використовуються при цьому?
13. В яких випадках використовують команди ПЕРЕХІД, ЯКЩО МІНУС та ПЕРЕХІД, ЯКЩО ПЛЮС?
14. Яка команда в експерименті 2.1 є лишньою?
15. Яким чином за допомогою команд умовних переходів можна реалізувати оператор if умова then дія1 else дія2?
16. Яким чином за допомогою команд умовних переходів можна реалізувати оператор repeat тіло циклу until умова?