Способи адресації операндів і команди пересилки даних в однокристальному мікропроцесорі Intel 8080 (МП КР580

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2011
Тип роботи:
Звіт
Предмет:
Архітектура комп'ютерів
Група:
КН-37

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ, НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра САПР ЗВІТ до лабораторної роботи №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, набула практичних навиків складання і налагодження програм з використанням цих команд. Під час виконання лабораторної роботи допускалися помилки при наборі команд асемблера, але в процесі тестування вони були виправлені.
Антиботан аватар за замовчуванням

26.01.2012 13:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!