МІНІСТЕРСТВО ОСВІТИ, НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра САПР
ЗВІТ
до лабораторної роботи №2
на тему: “Способи адресації операндів і команди пересилки даних в однокристальному мікропроцесорі Intel 8080 (МП КР580)”
з дисципліни «Архітектура комп’ютера»
Тема : “Способи адресації операндів і команди пересилки даних в однокристальному мікропроцесорі Intel 8080 (МП КР580)”.
Мета: вивчити арифметичні та логічні команди однокристального мікропроцесора (МП) КР580, набути практичні навики складання і налагоджування програм з використанням цих команд.
Варіант №64
Індивідуальне завдання. Ввести в пам'ять через акумулятор послідовність чисел 1-6. Прочитати їх через стек і записати в регістрові пари: B, D, H.
Короткі теоретичні відомості
Пам'ять МП КР580 має байтову структуру можлива адресація в пам'яті будь-якого байта. Ширина вибору з пам'яті - 1 байт. При звертанні до пам'яті використовуються 16-розрядні (двобайтові) адреси. Адресний простір МП КР580 становить 64 Кбайти. Система команд МП КР580 містить 244 команди. Команди складаються з одного, двох або трьох байтів і знаходяться в пам'яті (оперативній або постійній). Багатобайтові команди зберігаються в сусідніх комірках пам'яті.В однобайтових командах байт використовується для задання коду виконуваної операції. Однобайтові команди це команди обміну з пам'яттю, арифметичні, логічні, зсувів, операції зі стеком, керування системою переривань. Двобайтові команди - це команди з безпосереднім операндом або команди вводу/виводу. Перший байт команди містить код виконуваної операції, а другий - або безпосередній операнд, або операнд адреси порту вводу/виводу. Трибайтові команди містять у першому байті код виконуваної операції, а в другому або адреси пам'яті, або два байти безпосередніх даних. Спосіб адресації вказує на те, як за адресним кодом, що міститься в команді, визначити виконувану адресу. В одній команді для визначення адрес операндів і результату можуть застосовуватися різні способи адресації. МП КР580 має сім таких способів адресації. 1.Операнд, який розуміється. В команді не задаються явно ні адреса операнда, ні він сам. Операнд розуміється і фактично задається кодом операції команди. найчастіше таким операндом є одиниця, що додається чи віднімається від попереднього значення числа . 2. Неявна адресація. При цьому способі адресації адреса одного або двох операндів неявне задається в йоді операції. Операція може, наприклад, виконуватися вмістом акумулятора , який адресується кодом команди і спеціамно його вказувати не потрібно. У МП КР580 перший операнд завжди знаходиться в акумуляторі, а другий може бути адресований прямо, непрямо або безпосередньо. 3. Безпосередня адресація. При безпосередній адресації оеранд є частиною виконуваної команди. 4.Пряма регістрова адресація. У полі операндів команди задаються адреси регістрів загального призначення (РЗП) A,B,C,D,E,H,L 5. Пряма адресація. У полі операнда міститься повна 1б-6ітна адреса байта пам'яті. За допомогою прямої адресації можна звертатип до будь-якого байта адресного простору 6. Непряма регістрова адресація. В адресному полі команди вказується код пари регістрів, в якій міститься адреса комірки пам'яті, де розміщені потрібні дані. Розглянемо команди пересилання даних: 1. Пересилання даних з регістра в регістр.
MOV R1, R2; (R1) <- (R2). Вміст регістра R2 пересилається в регістр Rl. R1,R2 - регістри загального призначення (РЗП) A,B,C,D,E,H,L. Наприклад: MOV В,С; (В)<- (С).
2. Пересилання даних з пам'яті в регістр.
MOV R,M ; (R)<-((H)(L)); R - A,B,C,D,E,H,L.
Вміст комірки пам'яті, адреса якої знаходиться в регістрах Н і L пересилається в РЗП R. В регістрі Н задається старша половина адреси, в регістрі L - молодша половина.
Наприклад, нехай вміст регістра Н - 08Н, вміст регістра L – СЕН
MOV В,М ; (В)<-((08СЕН)).
3. Пересилання даних у пам'ять.
MOV M,R ; ((Н)(L))<-(R); R - A,B,C,D,E,H,L.
Вміст РЗП R пересилається в комірку пам'яті, адреса якої задається в парі регістрів Н і L.
Наприклад, нехай вміст регістра Н - 08Н, вміст регістра L - EFH.
MOV M,C ; ((08ЕFН))<-(С).
4. Безпосереднє пересилання даних у регістр.
MVI R, D8; (R)<-(байт2); D8 - константа, довжина якої 1 байт; R - A,B,C,D,E,H,L. Вміст другого байта команди пересилається в РЗП R. Наприклад:
MVI A,25H; (А)<-(25Н).
5. Безпосереднє пересилання даних у пам'ять.
MVI M, D8 ; ((H)(L)<-(байт2).
Вміст другого байта пам'яті пересилається у комірку пам'яті, адреса
якої міститься в парі регістрів H i L.
Наприклад, нехай вміст регістра Н - 08Н, вміст регістра L - 3ЕН.
MVI M, 40H ; ((083ЕН))<-(40Н).
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; (А)<-((байтЗ)(байт2)); ADDR - 16-бітна адреса. Вміст комірки пам'яті, адреса якої вказана в другому і третьому байтах команди, пересилається в акумулятор.
Наприклад:
LDA 0543Н ; (А)<-((0543H)).
8. Прямий запис вмісту акумулятора в пам'ять.
STAADDR ; ((байтЗ)(байт2))<-(А).
SHLD ADDR ; ((ADDR))<-(L); ((ADDR+1))<-(H).
Вміст акумулятора пересилається в комірку пам'яті, адреса якої задана у другому і третьому байтах команди.
Наприклад:
STA 083DH ; ((083DH))<-(A).
9. Пряме завантаження пари регістрів Н і L.
LHLD ADDR; (L)<-((байтЗ)(байт2)); (Н)<-((байт3)(байт2)+1).
У регістр L пересилається вміст комірки пам'яті, адреса якої задається другим і третім байтами команди, а в регістр Н - вміст комірки пам'яті з подальшою адресою.
Наприклад:
LHLD 08BCH ; (L)<-((08ВСН)); (H)<-((08ВОН)).
10. Прямий запис вмісту пари регістрів HL в пам'ять.
SHLD ADDR; ((байтЗ)(байт2))<-(L); ((6айтЗ)(6айт2)+1)<-(H). Вміст регістра L пересилається в комірку пам'яті, адреса якої задається 2-м і 3-м байтами команди, а регістр Н - в комірку з подальшою адресою.
Наприклад :
SHLD 08DDH ; ((08DDH))<-(L); ((08DE))<-(H).
11. Непряме завантаження акумулятора.
LDAX RP ; (A)<-((rh)(rl)); RP: B-BC, D-DE.
В акумулятор пересилається вміст комірки пам'яті, адреса якої задається в парі регістрів RP.
Наприклад, нехай вміст регістра В-08Н, вміст регістра С - D2H
LDAX В ; (A)<-(08D2H).
12. Непрямий запис вмісту акумулятора в пам'ять.
STAX RP ; ((rh)(rl))<-(А); RP: В- ВС, D- DE.
Вміст акумулятора пересилається в комірку пам'яті, адреса якої задається парою регістрів RP.
Наприклад, нехай вміст регістра D-08Н, вміст регістра Е - 01Н
STAX D ; ((0801Н))<-(А).
13. Обмін даними між парами регістрів HL і DE.
XCHG; (Н) <->(D) ; (L) <-> (Е).
Вміст регістрів HL взаємно обмінюється із вмістом регістрів DE. Розглянемо інші операції пересилання, які потребують не однієї, а більшого числа команд.
14. Пряме завантаження будь-якого регістра, відмінного від акумулятора.
LDA ADDR ; (A)<-((ADDR));
MOV REG,A; (REG)<-(A),
або
LXI H,ADDR ; (H)(L)<-(ADDR);
MOV REG,M ; (REG)<-((H)(L)).
15. Непряме завантаження будь-якого регістра з комірки пам'яті, адреса якої міститься в комірках ADDR і ADDR+1.
MOV REG,M ; (REG)«-((H)(L)). 16. Пряме завантаження будь-якої пари регістрів, крім пари HL. завантаження регістрової пари DE :
LHLD ADDR ; (L)<-((ADDR)); (H)<-((ADDR+1))
XCHG , (H)<->(D); (L)<->(E); завантаження регістрової пари ВС :
LHLD ADDR ; (L)<-((ADDR)); (H)<-((ADDR+1))
MOV B,H ; (В)<-(Н)
MOV C,L ; (С)<-(L); завантаження вказівника стека :
LHLD ADDR ; (L)<-((ADDR)); (H)<-((ADDR+1)); SPHL ; (SP)<-(H)(L).
17. Пряме запам'ятовування будь-яких регістрів, відмінних від акумулятора.
MOV A,REG ; (A)<-(REG); STA ADDR ; ((ADDR))<-(A). або
LXI H,ADDR ; (H)(L)<-(ADDR); MOV M, REG; ((H)(L))<-(REG)
18. Непряме запам'ятовування будь-якого регістра в комірці пам'яті,адреса якої міститься в комірках ADDR і ADDR+1.
LHLD ADDR ; (L)<-((ADDR)); (H)<-(ADDR+1)); MOV M,REG ; ((H)(L))<-(REG).
19. Пряме запам'ятовування будь-якої тіари регістрів, крім регістровоїпари HL.
запам'ятовування регістрової пари DE :
XCHG; (H)<->(D); (L)<->(E);
SHLD ADDR; ((ADDR))<-(L); ((ADDR+1))<-(H); запам'ятовування регістрової пари ВС : MOV Н,В ; (Н)<-(В); MOV L,C ; (L)<-(C); SHLD ADDR ; ((ADDR))<-(L); ((ADDR+1))<-(H).
20. Запам'ятати однобайтову константу VAL8 за адресою ADDR.
MVI A,VAL8 ; (А)<-(VAL8); STA ADDR ; ((ADDR))<-(A), або
LXI H, ADDR; (H)<-(ADDR);
MVI M, VAL8; ((H)(L))<-(VAL8);
21. Запам'ятати двобайтову константу VAL16 у комірках пам'яті задресами ADDR і ADDR+1.
LXI H,VAL16 ; (H)(L)<-(VAL16); 22. Запам'ятати однобайтову константу VAL8 у комірці пам'яті з адресою, що міститься в комірках ADDR і ADDR+1
LHLD ADDR; (H)(L)<-(ADDR)
MVI M,VAL8; ((H)(L))<-(VAL8).
Стек - це область оперативної пам'яті, яка адресується за допомогою вказівника стека (SР)(І6-розрядного програмне доступного регістра). На початку роботи зі стеком ініціалізується нижня межа стека
Текст програми ( *.asm файл )
ORG 100h
mvi A,1
sta 200h
mvi A,2
sta 201h
mvi A,3
sta 202h
mvi A,4
sta 203h
mvi A,5
sta 204h
mvi A,6
sta 205h
lxi H, 200h
SPHL
pop B
pop D
pop H
hlt
Текст програми ( *.prn файл )
0100 ORG 100H ;виділяємо місце під стек
0100 3E01 MVI A,1 ; посилання даних у пам'ять
0102 320002 STA 200H ;прямий запис вмісту акумулятора в пам'ять
0105 3E02 MVI A,2 ;посилання даних у пам'ять
0107 320102 STA 201H ;прямий запис вмісту акумулятора в пам'ять
010A 3E03 MVI A,3 ;посилання даних у пам'ять
010C 320202 STA 202H ;прямий запис вмісту акумулятора в пам'ять
010F 3E04 MVI A,4 ;посилання даних у пам'ять
0111 320302 STA 203H ;прямий запис вмісту акумулятора в пам'ять
0114 3E05 MVI A,5 ;посилання даних у пам'ять
0116 320402 STA 204H ;прямий запис вмісту акумулятора в пам'ять
0119 3E06 MVI A,6 ;посилання даних у пам'ять
011B 320502 STA 205H ;прямий запис вмісту акумулятора в пам'ять
011E 210002 LXI H, 200H ; безпосереднє завантаження пари регістрів
0121 F9 SPHL ; пересилання вмісту регістрів H і L у вказівник стеку
0122 C1 POP B ; дістає значення зі стеку
0123 D1 POP D ; дістає значення зі стеку
0124 E1 POP H ; дістає значення зі стеку
0125 76 HLT ; завершення програми
Карта пам’яті
Адреси
Дані
Коментар
DEC
HEX
BIN
200h
201h
202h
203h
204h
205h
1
2
3
4
5
6
1
2
3
4
5
6
0000 0001
0000 0010
0000 0011
0000 0100
0000 0101
0000 0110
1 – дане
2 – дане
3 – дане
4 – дане
5 – дане
6 – дане
Результат виконання лабораторної роботи
80MATE (tm) CP/M-80 Emulator 1.2
Copyright (c) 1984 Vertex Systems Inc.
SN #007#
60K TPA
; виконуємо компіляцію
J:[cpm] m l2.asm
CP/M MACRO ASSEM 2.0
0126
000H USE FACTOR
END OF ASSEMBLY
; виконуємо лінкування
J:[cpm] l l2.asm
FIRST ADDRESS 0100
LAST ADDRESS 0125
BYTES READ 0026
RECORDS WRITTEN 01
; відлагодження програми
J:[cpm] d l2.com
DDT VERS 1.0
NEXT PC
0180 0100
; виконуємо трасування 9 разів
-t9
C0Z0M0E0I0 A=00 B=0000 D=0000 H=0000 S=0100 P=0100 MVI A,01
C0Z0M0E0I0 A=01 B=0000 D=0000 H=0000 S=0100 P=0102 STA 0200
C0Z0M0E0I0 A=01 B=0000 D=0000 H=0000 S=0100 P=0105 MVI A,02
C0Z0M0E0I0 A=02 B=0000 D=0000 H=0000 S=0100 P=0107 STA 0201
C0Z0M0E0I0 A=02 B=0000 D=0000 H=0000 S=0100 P=010A MVI A,03
C0Z0M0E0I0 A=03 B=0000 D=0000 H=0000 S=0100 P=010C STA 0202
C0Z0M0E0I0 A=03 B=0000 D=0000 H=0000 S=0100 P=010F MVI A,04
C0Z0M0E0I0 A=04 B=0000 D=0000 H=0000 S=0100 P=0111 STA 0203
C0Z0M0E0I0 A=04 B=0000 D=0000 H=0000 S=0100 P=0114 MVI A,05*0116
; виконуємо трасування
-t
C0Z0M0E0I0 A=05 B=0000 D=0000 H=0000 S=0100 P=0116 STA 0204*0119
-t
C0Z0M0E0I0 A=05 B=0000 D=0000 H=0000 S=0100 P=0119 MVI A,06*011B
-t
C0Z0M0E0I0 A=06 B=0000 D=0000 H=0000 S=0100 P=011B STA 0205*011E
-t
C0Z0M0E0I0 A=06 B=0000 D=0000 H=0000 S=0100 P=011E LXI H,0200*0121
-t
C0Z0M0E0I0 A=06 B=0000 D=0000 H=0200 S=0100 P=0121 SPHL *0122
; виводимо у шістнадцятковому форматі комірки пам’яті, які знаходяться за даними адресами
-d200,205
0200 01 02 03 04 05 06 ......
-t
C0Z0M0E0I0 A=06 B=0000 D=0000 H=0200 S=0200 P=0122 POP B*0123
-t
C0Z0M0E0I0 A=06 B=0201 D=0000 H=0200 S=0202 P=0123 POP D*0124
-t
C0Z0M0E0I0 A=06 B=0201 D=0403 H=0200 S=0204 P=0124 POP H*0125
; виводжу вміст регістрів
-x
C0Z0M0E0I0 A=06 B=0201 D=0403 H=0605 S=0206 P=0125 HLT
-t
C0Z0M0E0I0 A=06 B=0201 D=0403 H=0605 S=0206 P=0125 HLT
*Execution halted
J:[cpm]
Висновок: на цій лабораторній роботі я вивчила способи адресації операндів і команди пересилання даних в однокристальному мікропроцесорі (МП) КР580, набула практичних навиків складання і налагодження програм з використанням цих команд. Під час виконання лабораторної роботи допускалися помилки при наборі команд асемблера, але в процесі тестування вони були виправлені.