Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторна робота 9

.pdf
Скачиваний:
8
Добавлен:
15.02.2015
Размер:
521.57 Кб
Скачать

11

Приклад

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. Описати послідовність виконання завдань та відобразити лістинг з коментарями до кожної строки у звіті, дати відповіді на контрольні запитання: що таке пряма та непряма адресація.