МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт про виконання лабораторної роботи №2
на тему: “Способи адресації операндів і команди пересилання даних однокристального МП КР580 ”
з курсу: “ Комп’ютери та мікропроцесорні системи ”
Виконав
студент групи КН-3
Львів - 2006
1. МЕТА РОБОТИ
Вивчити способи адресації операндів і команди пересилання даних в однокристальному мікропроцесорі (МП) КР580, набути практичні навики складання і налагодження програм з використанням цих команд.
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Способи адресації в МП КР580
Пам'ять МП КР580 має байтову структуру - можлива адресація в пам'яті будь-якого байта. Ширина вибору з пам'яті - 1 байт. При звертанні до пам'яті використовуються 16-розрядні (двобайтові) адреси. Адресний простір МП КР580 становить 64 Кбайти. Нумерація бітів акумулятора, регістрів і байта пам'яті показана на рис.1.
D7 D6 D5 D4 D3 D2 D1 D0
Рис.1
Система команд МП КР580 містить 244 команди. Команди складаються з одного, двох або трьох байтів і знаходяться в пам'яті (оперативній або постійній). Багатобайтові команди зберігаються в сусідніх комірках пам'яті.
В однобайтових командах байт використовується для задання коду виконуваної операції. Однобайтові команди - це команди обміну з пам'яттю, арифметичні, логічні, зсувів, операції зі стеком, керування системою переривань.
Двобайтові команди - це команди з безпосереднім операндом або команди вводу/виводу. Перший байт команди містить код виконуваної операції, а другий - або безпосередній операнд, або операнд адреси порту вводу/виводу.
Трибайтові команди містять у першому байті код виконуваної операції, а в другому - або адреси пам'яті, або два байти безпосередніх даних.
До команд, які використовують цей формат, відносяться команди переходів до підпрограм, безумовних і умовних переходів, завантаження регістрів і пам'яті. Необхідно звернути увагу на спосіб написання адреси або безпосереднього операнда в трибайтовій команді. Другий байт команди містить молодшу половину адреси або безпосереднього операнда, а третій байт - старшу.
Спосіб адресації вказує на те, як за адресним кодом, що міститься в команді, визначити виконувану адресу. В одній команді для визначення адрес операндів і результату можуть застосовуватися різні способи адресації. МП КР580 має сім таких способів адресації.
1.Операнд, який розуміється. В команді не задаються явно ні адреса операнда, ні він сам. Операнд розуміється і фактично задається кодом операції команди. Найчастіше таким операндом є одиниця, що додається чи віднімається від попереднього значення числа. Наприклад :
INR A (Збільшити на 1 вміст акумулятора)
0011 1100
КОП
У цій однобайтновій команді не задається явно операнд 1.
2. Неявна адресація. При цьому способі адресації адреса одного або двох операндів неявно задається в коді операції. Операція може, наприклад, виконуватися тільки з вмістом акумулятора, який адресується кодом команди і спеціально його вказувати не потрібно. У МП КР580 перший операнд завжди знаходиться в акумуляторі, а другий може бути адресований прямо, непрямо або безпосередньо. Наприклад :
DAA (Виконати десяткове доповнення акумулятора)
0010 0111
КОП
Ця однобайтова команда не містить адреси регістра.
3. Безпосередня адресація. При безпосередній адресації операнд є частиною виконуваної команди (рис.3).
PC <КОП> <B2> <B3>
ДАНІ
Рис.3
MOV REG,M ; (REG)((H)(L)).
4.Пряма регістрова адресація. У полі операндів команди задаються адреси регістрів загального призначення (РЗП) A,B,C,D,E,H,L (рис.4).
РЗП
PC КОП
ДАНІ
Рис.4
У МП КР580 використовується трирозрядне поле для вибору одного з семи РЗП. Наприклад :
MOV E,C
01 011 001
КОП КОДИ РЕГІСТРІВ
Переслати операнд з регістра С в регістр Е. Коди регістрів Е-011, С-001.
5. Пряма адресація. У полі операнда міститься повна 16-бітна адреса байта пам'яті (рис.5)
PC КОП <B2> <B3>
АДРЕС ДАНІ
Рис.5
За допомогою прямої адресації можна звертатися до будь-якого байта адресного простору. Наприклад :
STA 800H
0011 0010 0000 0000 0000 1000
КОП ВИКОНУВАНА АДРЕСА
Вміст акумулятора пересилається в комірку пам'яті, адреса якої вказана у другому і третьому байтах команди (0800Н).
6. Непряма регістрова адресація. В адресному полі команди вказується код пари регістрів, в якій міститься адреса комірки пам'яті, де розміщені потрібні дані (рис.6).
PC КОП B С
D E
H L
АДРЕСИ ДАНІ
Рис.6
Старші біти адреси зберігаються у першому регістрі пари, молодші- у другому. Наприклад :
STAX B
00 00 0010
КОД
ПАРИ ВС
Непрямий запис вмісту акумулятора в пам'ять. Вміст акумулятора пересилається в комірку пам'яті, адреса якої задана в парі регістрів ВС.
7. Стекова адресація. При стековій адресації реалізується безпосереднє завдання операнда. Дані заносяться в стек або зчитуються зі стеку, на початок якого вказує вміст вказівника стеку (SP). Наприклад :
PUSH B
11 00 0101
КОД
ПАРИ ВС
Пересилання в стек вмісту пари регістрів ВС.
Ряд команд використовує мішану адресацію пам'яті. Наприклад, команда CALL об'єднує пряму адресацію і стекову адресацію. Пряма адресація в команді CALL вказує адресу підпрограми, яка викликається для виконання. Стекова адресація через вказівник стека визначає адресу комірки пам’яті, куди записується значення лічильника команд.
2.2.Команди пересилання даних МП КР580
Ця група команд призначена для простого переміщення даних без будь-якої обробки. Джерелами і приймачами можуть бути регістри мікропроцесора, комірки пам'яті і регістри пристроїв вводу/виводу. При пересиланні дані в джерелі зберігаються, а в приймачі замінюються новими.
Оскільки пересилання даних здійснюється без участі арифметико- логічного пристрою, то прапорці стану не змінються. Розглянемо команди пересилання даних:
1. Пересилання даних з регістра в регістр.
MOV R1,R2 ; (R1)(R2).
Вміст регістра R2 пересилається в регістр R1. R1,R2 - регістри загального призначення (РЗП) A,B,C,D,E,H,L. Наприклад : MOV B,C ; (B)(C).
2. Пересилання даних з пам'яті в регістр.
MOV R,M ; (R)((H)(L)); R - A,B,C,D,E,H,L.
Вміст комірки пам'яті, адреса якої знаходиться в регістрах H і L пересилається в РЗП R. В регістрі H задається старша половина адреси, в регістрі L - молодша половина. Наприклад, нехай вміст регістра H - 08H, вміст регістра L - CEH
MOV B,M ; (B)((08CEH)).
3. Пересилання даних у пам'ять.
MOV M,R ; ((H)(L))(R); R - A,B,C,D,E,H,L.
Вміст РЗП R пересилається в комірку пам'яті, адреса якої задається в парі регістрів H і L . Наприклад, нехай вміст регістра H - 08H, вміст регістра L - EFH.
MOV M,C ; ((08EFH))(C).
4. Безпосереднє пересилання даних у регістр.
MVI R,D8 ; (R)(байт2); D8 - константа,
довжина якої 1 байт; R - A,B,C,D,E,H,L. Вміст другого байта команди пересилається в РЗП R. Наприклад : MVI A,25H ; (A)(25H).
5. Безпосереднє пересилання даних у пам'ять.
MVI M,D8 ; ((H)(L))(байт2).
Вміст другого байта пам'яті пересилається у комірку пам'яті, адреса якої міститься в парі регістрів H і L. Наприклад, нехай вміст регістра H - 08H, вміст регістра L - 3EH.
MVI M,40H ; ((083EH))(40H).
6. Безпосереднє завантаження пари регістрів .
LXI RP,D16 ; (rh)(байт3); (rl)(байт2);
RP: B- BC, D- DE, H- HL, SP; D16 - константа, довжина якої 2 байти. Третій байт команди пересилається в старший регістр пари регістрів RP (rh), другий - в молодший регістр (rl). Наприклад :
LXI B,FFEDH ; (C)(FFH); (B)(EDH);
LXI SP,BCDH ; (SP)(0BCDH).
7. Пряме завантаження акумулятора.
LDA ADDR ; (A)((байт3)(байт2)); ADDR - 16-бітна адреса. Вміст комірки пам'яті, адреса якої вказана в другому і третьому байтах команди, пересилається в акумулятор.
Наприклад : LDA 0543H ; (A)((0543H)).
8. Прямий запис вмісту акумулятора в пам'ять.
STA ADDR ; ((байт3)(байт2))(А).
9. Пряме завантаження пари регістрів H і L.
LHLD ADDR; (L)((байт3)(байт2));(H)((байт3)(байт2)+1).
У регістр L пересилається вміст комірки пам'яті, адреса якої задається другим і третім байтами команди, а в регістр H - вміст комірки пам'яті з подальшою адресою. Наприклад : LHLD 08BCH ; (L)((08BCH)); (H)((08BDH)).
10. Прямий запис вмісту пари регістрів HL в пам'ять.
SHLD ADDR;((байт3)(байт2))(L); ((байт3)(байт2)+1)(H).
Вміст регістра L пересилається в комірку пам'яті, адреса якої задається 2-м і 3-м байтами команди, а регістр H - в комірку з подальшою адресою. Наприклад :
SHLD 08DDH ; ((08DDH))(L); ((08DE))(H).
11. Непряме завантаження акумулятора.
LDAX RP ; (A)((rh)(rl)); RP: B-BC, D-DE.
В акумулятор пересилається вміст комірки пам'яті, адреса якої задається в парі регістрів RP. Наприклад, нехай вміст регістра В-08H, вміст регістра С - D2H
LDAX B ; (A)(08D2H).
12. Непрямий запис вмісту акумулятора в пам'ять.
STAX RP ; ((rh)(rl))(A); RP: B- BC, D- DE.
Вміст акумулятора пересилається в комірку пам'яті, адреса якої задається парою регістрів RP. Наприклад, нехай вміст регістра D-08H, вміст регістра E - 01H
STAX D ; ((0801H))(A).
13. Обмін даними між парами регістрів HL і DE.
XCHG ; (H) <->(D) ; (L) <-> (E).
Вміст регістрів HL взаємно обмінюється із вмістом регістрів DE.
2.3 Стек і команди роботи зі стеком в однокристальному МП КР580
Стек - це область оперативної пам'яті, яка адресується за допомогою вказівника стека (SP)(16-розрядного програмно доступного регістра). На початку роботи зі стеком ініціалізується нижня межа стека.
Верхня межа стека (умовна)
STACK
Нижня межа стека
FFFFH
При записуванні інформації в стек він зростає в бік молодших адрес. У МП КР580 стекові операції виконуються з 16-бітними словами. У стек можна записувати тільки вміст регістрових пар і отримувати інформацію зі стека можна лише у регістрові пари. Розглянемо команди роботи зі стеком.
1. Занесення в стек вмісту пари регістрів :
PUSH RP ; RP: B- BC, D- DE, H- HL;
((SP)-1))(rh);
((SP)-2))(rl);
(SP)(SP)-2 .
На рис.8,а показано стан стека до виконання команди PUSH H, а на рис.8,б - після виконання команди.
SP L
SP H
Послідовність дій МП при виконанні команди PUSH H така :
вміст вказівника стека зменшується на 1: (SP)(SP)-1;
в комірку пам'яті за адресою ((SP)-1) записується вміст регістра H;
вміст вказівника стека зменшується на 1: (SP)(SP)-1;
в комірку пам'яті за адресою ((SP)-2) записується вміст регістра L : ((SP)-2)(L).
2. Зчитування зі стека вмісту пари регістрів.
POP RP ;
(rl)((SP));
(rh)((SP)+1);
(SP)((SP)+2).
Вміст комірки пам'яті, адреса якої визначається вмістом вказівника стека SP, пересилається в молодший регістр пари регістрів RP. Вміст наступної за зростанням адреси комірки пересилається в старший регістр пари. Вміст вказівника стека збільшується на 2.
3. Обмін вмісту верхівки стека і вмісту пари HL.
XTHL; (L)((SP)); (H)((SP)+1);
4. Пересилання вмісту регістрів H і L у вказівник стека.
SPHL; (SP)<--J--(H)(L).
Вміст регістрів H і L (16 біт) пересилається у вказівник стека.
Постановка лабораторного завдання
Занести 4 константи в стек. В підпрограмі виконати логічне І (^) над чотирма константами (1-ша з 2-ою, результат з 3-ою, результат з 4-ою). Отриманий результат занести в A.
Текст програми
org 100h
mvi b,10
mvi c,11
lxi sp,1112h
push b
mvi d,12
mvi e,13
push d
call a1
hlt
a1:
pop h
pop d
pop b
mov a,b
ana c
ana d
ana e
push h
ret
Результати виконання програми
Висновки: виконавши дану лабораторну роботу, я вивчив основні способи адресації у МП КР 580 та на практиці освоїв команди передачі даних.