Лабораторна робота 9
.pdf11
Приклад
POP D
Ця команда завантажує регістри D і Е з вершини стека і збільшує покажчик стека на 2. Регістр Е завантажується першим у відповідності з форматом для 16-розрядних чисел, прийнятим в 8080,8085.
Стек має такі характерні особливості.
Покажчик стека містить адресу комірки, яка була зайнята самої останньої (молодший зайнятий адресу). Стек може бути розташований у будь-якому місці пам'яті.
Дані запам'ятовуються в стеку з використанням «предзменшення», тобто команди зменшують покажчик стека на 1 перед запам'ятовуванням кожного байта. Дані завантажуються з стека з використанням «післезбільшення», тобто команди збільшують покажчик стека на 1 після завантаження кожного байта.
Як це типово для мікропроцесорів, відсутні покажчики виходу за межі стека в ту чи іншу сторону.
ЗАПАМ'ЯТОВУВАННЯ РЕГІСТРУ В ПАМ'ЯТЬ
Для запам'ятовування регістрів у пам'яті існують три способи адресації: пряма (на згадку з конкретною адресою), непряма (на згадку з адресою, який знаходиться в парі регістрів) і стекова (у вершину стека).
Пряме запам'ятовування РЕГІСТРУ
Пряма адресація може бути використана тільки для запам'ятовування акумулятора чи реєстрів Н і L.
Приклади
1.STA 35C8H
При виконанні цієї команди запам'ятовується акумулятор в комірці пам'яті 35С816.
2. SHLD 203АН
При виконанні цієї команди запам'ятовується регістр L в комірці пам'яті 203A16, а регістр Н - в комірці пам'яті 203В16, тобто, як завжди, у зворотному порядку.
ОПОСЕРЕДКОВАНЕ ЗАПАМ'ЯТОВУВАННЯ РЕГІСТР
При виконанні цієї команди MOV M, REG може запам'ятовуватися будь-який регістр за адресою, що знаходиться в регістрах Н і L. Команда STAX може запам'ятати акумулятор за адресою, що знаходиться в парі регістрів В або D. Зауважимо, що немає команди для непрямого запам'ятовування пари регістрів.
Приклади
MOV М, С
При виконанні цієї команди запам'ятовується регістр С за адресою, що міститься в регістрах Н і L. Команда формується у вигляді: переслати у М із С.
12
STAX D
При виконанні цієї команди запам'ятовується акумулятор в пам'яті за адресою, що міститься в регістрах D і Е. Команда MOV М, А має те ж саме призначення, але в ній використовується адреса в регістрах Н і L. Зауважимо, однак, що акумулятор є єдиним регістром, який можна запам'ятати побічно за допомогою регістрів D і Е або В і С.
ЗАПАМ'ЯТОВУВАННЯ РЕГІСТРУ В СТЕК
При виконанні команди PUSH RP запам'ятовується пара регістрів у вершині стека і встановлюється відповідно покажчик стека. Однією з пар регістрів є слово стану процесора (PSW), яке містить акумулятор (старший байт) і прапори (молодший байт). Немає команди, при виконанні якої запам'ятовується в стеку один регістр.
Приклад
PUSH В
При виконанні цієї команди запам'ятовуються регістри В і С у вершині стека і покажчик стека зменшується на 2. Регістр С запам'ятовується першим, тому В закінчує стек в його вершині.
ІНШІ ОПЕРАЦІЇ ЗАВАНТАЖЕННЯ І ЗАПАМ'ЯТОВУВАННЯ
Інші операції завантаження і запам'ятовування вимагають не одну, а більше число команд. Типові приклади таких операцій:
Пряме завантаження будь-якого регістру, відмінного від А:
LDA ADDR
MOV REG, A
або
LXI H, ADDR
MOV REG, M
При другому методі А залишається без зміни, але використовуються Н і L. Само собою зрозуміло, адреса в Н і L може стати в нагоді для подальшого використання.
Непряма завантаження будь-якого регістру (з пам'яті, адреса якої міститься в осередках INDIR і INDIR + 1):
LHLD INDIR ; ВЗЯТИ НЕПРЯМУ АДРЕСУ
MOV REG,M ; ЗАГРУЗИТИ ДАНІ ОПОСЕРЕДКОВАНО
Пряме завантаження будь-якої пари регістрів, відмінних від Н і L: регістрів D і Е
LHLD ADDR |
; переслати дані у HL |
XCHG |
; і потім у DЕ |
Команда XCHG служить спеціально для обміну пари регістрів D з парою регістрів Н:
регістрів В і С
13
LHLD ADDR |
; переслати дані у HL |
MOV В,Н |
; і потім у ВC по байту за раз |
MOV C,L |
|
покажчика стека |
|
LHLD ADDR |
; переслати дані у HL |
SPHL |
; і потім у SP |
Запам'ятовування даних в ОЗП
Початкові значення осередків ОЗП задаються або через акумулятор, або прямо чи опосередковано з використанням регістрів Н і L.
Приклади
Запам'ятати 8-розрядний елемент (VALUE) за адресою ADDR:
MVI А, VALUE STA ADDR
або
LXI Н, ADDR
MVI M, VALUE
У першому випадку, якщо VALUE= 0, MVI A, VALUE можна замінити на SUB А або на XRA А. Зауважимо, що SUB А чи XRA А змінюють прапори, у той час як MVI А, 0 не змінює.
Запам'ятати 16-розрядний елемент (VAL16) за адресами ADDR і ADDR +1 (старшим за значенням байтом є ADDR + 1):
LXI Н,VAL16
SHLD ADDR
Запам'ятати 8-розрядний елемент (VALUE) за адресою, що міститься в елементах пам'яті INDIR і INDIR + 1:
LHLD INDIR ;взяти непряму адресу
MVI Н, VALUE ; запам’ятати значення опосередковано
Хід виконання роботи:
1. ЗДІЙСНИТИ ПЕРЕДАЧУ ДАНИХ З РЕГІСТРУ В РЕГІСТР.
Для цього у секцію мнемокодів увести наступне: a) Передача вмісту акумулятору в регістр:
mvi a, 6D mov b, a
Асемблювати вираз, запустити виконання програми та продивитись значення а в панелі «Регистры и флаги». Описати послідовність дій у звіті.
b) запис вмісту регістра в пам'ять за адресою в регістрах Н і L; mvi a, 08
14
mov h, a mvi a, 3A mov l, a mov m, a
Асемблювати вираз, запустити виконання програми та продивитись значення а в панелі «ОЗУ стенда». Описати послідовність дій у звіті.
c) обмінює вміст пари регістрів D (регістри D і Е) з вмістом пари регістрів Н (регістри Н і L)
mvi a, 08 mov h, a mvi a, 3A mov l, a
XCHG
Асемблювати вираз, запустити виконання програми та продивитись значення а в панелі «Регистры и флаги». Описати послідовність дій у звіті.
2.ЗДІЙСНИТИ ПРЯМЕ ЗАВАНТАЖЕННЯ РЕГІСТРІВ
mvi c, 3F mvi b, 0B mvi d, 19 mov h, b mov l, d mov m, c lda 0B19
Асемблювати вираз, запустити виконання програми та продивитись значення а в панелі «Регистры и флаги». Описати послідовність дій у звіті.
Контрольні завдання:
1. Написати та відлагодити програму для наступного:
а) занести в регістрову пару HL значення 081Е16;
б) занести довільне значення у дві сусідні комірки пам’яті, потім здійснити непряме завантаження пари комірок ВС цим значення за допомогою команди LDAX В
в) занести в стек значення пари регістрів ВС, а потім вивести це значення у пару регістрів HL
2. Описати послідовність виконання завдань та відобразити лістинг з коментарями до кожної строки у звіті, дати відповіді на контрольні запитання: що таке пряма та непряма адресація.