litceysel.ru
добавить свой файл
1
Лабораторная работа 3

Система команд микропроцессора Intel8080. Разработка простых программ с использованием команд передачи данных


Цель работы: Исследование выполнения отдельных команд передачи данных и простых программ; исследование процесса выполнения команд по машинным циклам, самостоятельная разработка программ на языке ассемблер.

1. Краткие сведения из теории

Для разработки программ необходимо знание архитектуры микро­процессора и микропроцессорной системы. Архитектура отражает воз­можности прикладного использования микропроцессора и содержит описание программной модели и системы команд, обеспечивающих дос­туп к элементам модели. Программная модель системы на основе МП Intel8080 (рис. 1.) содержит непосредственно модель МП, модель памяти и модель портов ввода-вывода.



Рис. 1. Программная модель микропроцессорной системы на основе Intel 8080.

Модель МП содержит следующие элементы:

1) шесть 8-разрядных регистров (B,C,D,E,H,L), которые могут использоватся автономно и попарно как 3 16-разрядных регистра (BC,DE,HL). Регистры и регистровые пары используются для времен­ного хранения данных, адресов памяти и косвенной адресации основ­ной памяти (в качестве указателя памяти). Регистровая пара HL преимущественно используется как указатель памяти в коротких од­нобайтных командах, причем ячейка памяти, адрес которой содержит­ся в HL паре, называется М-регистром. В функциональном отношении этот регистр эквивалентен регистрам МП.

2) 16-разрядный регистр указатель стека (SP). Используется для указания адреса вершины стека, который размещен в памяти.

3) 8-разрядный аккумулятор (А-регистр) – основной рабочий ре­гистр МП, который используется АЛУ для размещения одного из опе­рандов (данное участвующее в операции) и результата выполнения операции. Совместно с F-регистром образует регистровую пару, ко­торая носит название слово состояния программы (PSW).


4) 8-разрядный F-регистр (регистр признаков, или флагов) – от­ражающий некоторые особенности выполнения операций АЛУ. F-регистр фиксирует 5 различных признаков (3 разряда не используются):

S – бит знака, равен 1, если число отрицательное (совпадает по значению со старшим (седьмым) битом аккумулятора;

Z – бит нуля, равен 1, если результат операции равен нулю;

P – бит паритета, равен 1, если число единиц результата четное;

CY – бит переноса, равен 1, если при выполнении операции прои­зошел перенос (или заем) из старшего разряда АЛУ. Признак очень важен при выполнении операций с данными увеличенной разрядности;

AC – бит вспомогательного переноса, равен 1, если при выполне­нии операции произошел перенос из младшей тетрады (4 двоичных разряда) в старшую. Используется командой десятичной коррекции содержимого аккумулятора.

Модель памяти представляет собой упорядоченную и пронумерован­ную последовательность 8-разрядных структурных элементов – ячеек памяти. Номер ячейки является ее адресом. Шина адреса МП является 16-разрядной поэтому максимальное число адресуемых ячеек равно 216 (65536=64К). Адрес любой ячейки памяти представляется 4-х раз­рядным шестнадцатеричным числом (от 0000H до 0FFFFH), а ее содержимое это 2-разрядное шестнадцатеричное число. Над каждой ячейкой памяти могут быть выполнены операции записи байта в ячейку и чте­ния содержимого ячейки. Память такого типа называют ОЗУ. Эта па­мять используется для хранения программ, исходных, промежуточных и результирующих данных.

В реальных МП системах фактическое число ячеек памяти может быть меньше адресного пространства и, кроме того, разделено на части по конструктивным признакам. В нашем лабораторном макете, например, используются только первые 4К адресного пространства и первые 2К – это постоянное ЗУ.

Модель портов ввода-вывода представляет собой также упорядо­ченную пронумерованную последовательность 8-разрядных регистров. Эти регистры адресуются по 8 младшим линиям шины адреса, поэтому максимальное число портов – 256. Внешние устройства обмениваются информацией с МП через соответствующий порт ввода или вывода.


Система команд – набор элементарных операций выполняемых МП. Набор команд МП Intel8080 содержит 78 базовых команд имеющих 244 модификации. Функциональные возможности системы команд определя­ются форматом обрабатываемых данных, форматом команд и способами адресации операндов в командах. Малая разрядность регистров МП приводит к необходимости использования различных способов непря­мой адресации памяти, сокращающих длину команды и размеры прог­рамм. В МП Intel8080 используются следующие способы адресации операндов: –

Прямая адресация – во втором и третьем байтах команды содер­жится адрес памяти, по которому находится операнд.

Регистровая адресация – операнд в одном из ре­гистров МП и команда указывает на этот регистр.

Косвенная регистровая адресация – адрес операнда находится в регистровой паре, на которую указывает команда.

Непосредственная адресация – операнд размещен непосредственно в команде (во втором, или во втором и третьем, байте команды).

Стековая адресация – адрес памяти определяется регистром ука­зателем стека.

Формат команды – одно-, двух- или трехбайтовое число. Первый байт команды представляет собой код операции, второй и третий – данные или адрес. Команды с регистровым, косвенным регистровым и стековым методом адресации – однобайтовые; с прямым – трехбайто­вые; с непосредственным – двух- или трехбайтовые. В трехбайтовых командах действует принцип – младший байт по младшему адресу, т. е. в коде команды сначала идет младший байт адреса, потом старший.

Все команды МП Intel8080 подразделяются на 5 функционально специализированных групп:

команды передачи данных;

команды арифметических операций;

команды логических операций;

команды передачи управления;

команды стека, ввода–вывода и управления.


1.1. Команды передачи данных.

Такие команды обеспечивают выполнение операций размещения, об­мена, загрузки и перемещения данных.


1) МОV R1,R2 . Передача данных из регистра R2 в R1. Однобайто­вая команда с регистровым способом адресации. В качестве R1(R2) могут выступать регистры общего назначения (B,C,D,E,H,L), аккуму­лятор (А) и ячейка памяти (М). В последнем случае адрес ячейки должен находиться в регистровой паре HL.

Формат команды

01DDDSSS ,

где DDD
–код регистра приемника, SSS–код регистра источника (таблица 1).

Примеры: MOV B,D (копирование содержимого регистра D в регистр B); MOV A,M (копирование содержимого ячейки памяти в аккумулятор, адрес ячейки находится в регистровой паре HL).

2) MVI R,data. Передача в регистр непосредственных данных. Двухбайтовая команда с непосредственным способом адресации. Регистр R оп­ределяется как и в предыдущем случае.

Формат команды

00DDD110 КОП (байт кода операции);

XXXXXXXX Данные (1 байт).

Примеры: MVI H,0A7H (загрузка непосредственного числа 0А7Н в регистр Н); MVI M,0FH (загрузка непосредственного числа 0FН в ячейку памяти, адрес ячейки в регистровой паре HL).


Таблица 1.

Регистр

DDD(SSS)

A

B

C

D

E

H

L

M

111

000

001

010

011

100

101

110

3) LXI RP,data16. Непосредственная загрузка регистровой пары. Трехбайтовая команда с непосредственным способом адресации. Загру­жает два байта а регистровую пару BC, DE, HL или SP.


Формат команды:

00RP0001
КОП;

XXXXXXXX
младший байт данных;

XXXXXXXX старший байт данных.


Таблица 2.

Регистровая пара

RP

BC

DE

HL

SP

00

01

10

11

4) LDA addr. Прямая загрузка аккумулятора.

STA addr. Прямое запоминание аккумулятора.

Команда загружает из памяти данные в аккумулятор (из аккумуля­тора в память), причем адрес ячейки памяти берется прямо из ко­манды.

Форматы команд:

LDA STA

00111010 00110010 КОП;

xxxxxxxx xxxxxxxx младший байт адреса;

xxxxxxxx xxxxxxxx старший байт адреса.

5) LHLD addr. Прямая загрузка регистровой пары HL.

SHLD addr. Прямое запоминание регистровой пары HL.

Команда загружает из памяти данные в регистровую пару HL (из регистровой пары HL в память), причем адрес ячейки памяти берет­ся прямо из команды.

Форматы команд:

LHLD SHLD

00101010 00100010 КОП;

xxxxxxxx xxxxxxxx младший байт адреса;

xxxxxxxx xxxxxxxx старший байт адреса.

6) LDAX RP. Косвенная загрузка аккумулятора.

STAX RP. Косвенное запоминание аккумулятора.

Команда загружает из памяти данные в аккумулятор (из аккумуля­тора в память), причем адрес ячейки памяти берется из регистровой пары BC или DE.

Форматы команд:

LDAX STAX

00RP1010 00RP0010

7.XCHG. Обмен содержимого регистровых пар DE и HL.


Формат команды:

11101011

1.2. Команды передачи управления.

Команды используются для создания разветвляющихся и цикли­ческих программ. В качестве проверяемого условия выступают значе­ния битов флагового регистра.

1) JMP adress. Передача управления команде находящейся по ад­ресу adress.

Формат команды

11000011 КОП

ХХХХХХХХ младший байт адреса

ХХХХХХХХ старший байт адреса

2) Jусл adress. Передача управления команде находящейся по ад­ресу adress если выполнено условие, в противном случае переход к следующей по порядку команде.

Формат команды

11ссс010 КОП (ссс – код условия из таблицы 3);

ХХХХХХХХ младший байт адреса;

ХХХХХХХХ старший байт адреса.

Таблица 3.


Код условия

Значение ссс

Коментарий

NZ

000

переход, если не нуль

Z

001

переход, если нуль

NC

010

переход, если не установлен перенос

C

011

переход, если установлен перенос

PO


100

переход, если нечетно

PE

101

переход, если четно

P

110

переход, если знак плюс

M

111

переход, если знак минус



3) CALL adress. Передача управления подпрограмме находящейся по адресу adress.Содержимое программного счетчика записывается в стек, а adress записывается в программный счетчик.

Формат команды

11001101 КОП

ХХХХХХХХ младший байт адреса

ХХХХХХХХ старший байт адреса

4) Cусл adress. Передача управления подпрограмме находящейся по адресу adress (содержимое программного счетчика записывается в стек, а adress записывается в программный счетчик) если выполнено условие, в противном случае переход к следующей по порядку коман­де.

Формат команды

11ссс100 КОП (ссс – код условия из таблицы 3)

ХХХХХХХХ младший байт адреса

ХХХХХХХХ старший байт адреса Код условия Значение Коментарий

5) RET. Возврат из подпрограммы. Из стека в программный счет­чик записывается значение адреса основной программы.

Формат команды

11001001 КОП

ХХХХХХХХ младший байт адреса

ХХХХХХХХ старший байт адреса

6) Rусл adress. Возврат из подпрограммы, если выполнено усло­вие, в противном случае переход к следующей по порядку команде.

Формат команды

11ссс000 КОП (ссс – код условия);


ХХХХХХХХ младший байт адреса;

ХХХХХХХХ старший байт адреса.

В данной работе мы будем использовать 4 команды из группы арифметических команд:

1) INR R . Инкремент (увеличение на 1) содержимого регистра R.

DCR R . Декремент (уменьшение на 1) содержимого регистра R. Однобайтовые команды с регистровым способом адресации. В качестве R могут выступать регистры общего назначения (B,C,D,E,H,L),аккуму­лятор (А) и ячейка памяти (М). В последнем случае адрес ячейки должен находиться в регистровой паре HL. Содержимое регистра R увеличивается (уменьшается) на 1 и результат помещается в тот же регистр. Команды влияют на все биты флагового регистра микропро­цессора за исключением бита переноса, который не изменяется.

Формат команды

00SSS10D ,

где SSS – код регистра,

D=0 – инкремент,

D=1 – декремент.

2) INX RR. Инкремент содержимого регистровой пары.

DCX RR. Декремент содержимого регистровой пары. Однобайтовые команды с регистровым способом адресации. В качестве операнда используются регистровые пары BC, DE, HL и SP. На состо­яние битов флагового регистра команды не влияют.

Формат команды

00RRD011 ,

где RR – код регистровой пары,

D=0 – инкремент,

D=1 – декремент.

2. Исследование выполнения программ

Рассмотрим программу, записывающую число 0А0Н в память по ад­ресу 0900Н.

Программа 1 (общий вид записи)

Адрес Машинный код Мнемокод Коментарий

0800 3E A0 MVI A,0A0; загрузить число в аккумулятор

0802 32 00 09 STA 0900 ; записать число по адресу 0900

0805 76 HLT ; останов

Порядок выполнения:

1. Ввести в УМК программу 1.

2. Записать по адресу 0900 любое число.

3. Осуществить пуск программы. Последовательно нажать клавиши "СБ", "СТ", ввести адрес 0800 и нажать клавишу "ВП". Выждать 1–2с и нажать клавишу "ПР", при этом на адресном дисплее отобразится адрес ячейки, следующий за командой HLT.


4. Проверить результат выполнения программы путем считывания числа из ячейки 0900.

В приведенной выше программе 1 используется прямой способ ад­ресации.

Программа 2 (с использованием косвенного способа адресации).

Адрес Машинный код Мнемокод Коментарий

0800 21 00 09 LXI H,0900; записать в регистры H,L

; число 0900

0803 3Е A0 MVI A,0A0 ; записать непосредственное

; число 0A0 в аккумулятор

0805 77 MOV M,A ; записать число из аккуму-

; лятора по адресу, указан-

; ному в регистрах, H и L

0806 76 HLT ; останов


Порядок выполнения:

1. Ввести в УМК программу 2.

2. Записать по адресу 0900 любое число.

3. Осуществить пуск программы с адреса 0800. Проверить резуль­тат выполнения программы по числу, записанному по адресу 0900.

4. Исследовать процесс выполнения программы по машинным цик­лам.

5. В точках останова исследовать содержимое аккумулятора, ре­гистров H,L и ячейки памяти 0900.

Программа 3. Программа формирования в памяти, начиная с адреса 0900Н, массива из 10 последовательных чисел.

Адрес Машинный код Мнемокод Комментарий

0800 0E 14 MVI C,0АH ;загрузка в регистр С коли-

;чества чисел

0802 3E 01 MVI A,01H ;загрузка в А первого числа

0804 21 00 09 LXI H,0900H;в пару HL - адрес памяти

0807 7E MOV A,M ;содержимое А копируется в

;память

0808 3C INR A ;инкремент аккумулятора

0809 23 INX H ;инкремент указателя памяти

080A 0D DCR C ;декремент счетчика

080B C2 07 08 JNZ0807 ;возврат к шагу 0807

080E 76 HLT ;останов

Порядок выполнения:

1. Ввести в УМК программу 3.

2. Осуществить пуск программы с адреса 0800. Проверить резуль­тат выполнения программы по числам, записанным по адресу 0900 и далее.


3. Исследовать процесс выполнения программы по машинным цик­лам.

4. В некоторых точках исследовать содержимое аккумулятора, ре­гистров H,L и ячеек памяти 0900.

ЗАДАНИЕ

Используя команды передачи данных составить программу пересыл­ки данных из ячеек 0900 и 0901 по адресам 0910 и 0911, занести ее в УМК и проверить ее выполнение. Составить программу пересылки массива из 10 байтов, расположенных в памяти последовательно на­чиная с адреса 0900Н, в 10 ячеек начиная с адреса 09А0Н, причем данное в исходном массиве находящееся по младшему адресу в полу­ченном массиве должно располагаться по старшему адресу.

Содержание отчета.

1. Программная модель МП Intel8080.

2. Команды передачи данных.

3. Ассемблерные записи программ с комментариями.

4. Пошаговый разбор работы программ.