МПС

Система команд микропроцессора Intel8080 (Лаба)

 

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

 

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

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

 

Рис. Программная модель микропроцессорной системы на основе 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 функционально специализированных групп:

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

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

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

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

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

 

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

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

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 – декремент.

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

Рассмотрим программу, записывающую число 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     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. Пошаговый разбор работы программ.