Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микро_Контр_андр4.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
881 Кб
Скачать
☆

3 Работа с микропроцессором кр580

Длина слова МП К580 (КР580) − 8 битов (байт). При обращении к памяти используются 16- битные адреса, что позволят обращаться к 65536 ячейкам памяти.

МП имеет 8-битный аккумулятор (регистр А), шесть 8-битных регистров общего назначения (В, C, D, E, H, L ), а также регистр флагов F. Регистры общего назначения могут объединяться в 16-битные регистры двойной длины.

Содержимое аккумулятора и регистра флагов объединяется в «слово состояния процессора» (PSW). В МП результат характеризуется следующими флагами (1 − флаг установлен, 0 − сброшен):

− флаг знака S (SING), совпадает со старшим битом результата;

− флаг нуля Z (ZERO), устанавливается при нулевом результате;

− флаг вспомогательного переноса AC(AUXILIARY CARRY), устанавливается при возникновении переноса из третьего бита в четвертый;

− флаг паритета P (PARITY), устанавливается при наличии в результате четного числа единиц;

− флаг переноса CA (CARRY), устанавливается при переносе из старшего бита результата (при вычитании становится флагом «заема»).

Команды МП по своим форматам делятся на одно-, двух- и трехбайтные.

Для успешной подготовки программ необходимо представлять совокупность элементов УОУ, их назначение и взаимодействие, т.е. программистскую модель УОУ. Такая модель изображена на рисунке 1.

Рисунок 1 – Программная модель процессора К580

3.1 Составление программ

3.1.1 Составление программы сложения

Любая команда имеет два поля: поле кода операции (КОП) и адресное поле.

МП КР580 использует 4 режима адресации:

1. Регистровая адресация операнд находится в одном из регистров МП. (MOV B, A; A>B);

2. Непосредственная адресация операнд непосредственно записан в коде команды. Такие команды имеют в мнемонике букву I, и перед операндом ставится запятая (MVIA, 20h; 20h>A);

3. Прямая адресация операнд находится в памяти, а в команде указывается его адрес (LDA 8250; M[8250] >A);

4. Косвенно-регистровая, операнд находится в памяти, а в команде указывается регистровая пара, в которой находится адрес операнда. (MVI M,12; 12h>M[HL])

Все команды, в которых участвует регистр М это команды с косвенной адресацией.

Режим адресации определяет длину (формат) команды.

В качестве среды ввода программы используется программная модель-эмулятор МПС, построенная на базе особенностей рассматриваемого микропроцессора.      Данный эмулятор позволяет: написание программ на языке ассемблера, используя систему команд МП КР580ВМ80А, их отладку и выполнение в тактовом, командном и сквозном режимах; изучить принципы и порядок выполнения команд; приобрести навыки работы с внешними устройствами МП-системы; получить представления об организации внешней и внутренней (регистровой) памяти и стековой области.

Программа обладает дружественным и приятным интерфейсом, удобна в использовании и имеет функции сохранения, экспорта и печати данных. Всё это позволяет легко и удобно освоиться в ней, а также, получить все необходимые вышерассмотренные навыки.

Также, эмулятор может быть полезен и для опытных людей, к примеру, в качестве визуализированного помощника в программировании разрабатываемой ими МП-системы на базе КР580ВМ80 (i8080).

В возможности эмулятора входит: работа с 5-ю внешними устройствами, такими, как монитор, НГМД, НЖМД, сетевой адаптер и принтер; отладка и выполнение программ в тактовом, командном и сквозном режимах; работа со всем спектром системы команд данного МП; сохранение, загрузка и печать данных и результатов; ручной ввод данных в ОЗУ и РОН. Также, в состав дистрибутива включено подробное руководство пользователя, описание системы команд и файлы-образы ОЗУ эмулятора для примера.

Составим программу сложения (табл. 1).

Таблица 1 − Программа сложения двух однобайтных чисел

Адрес

Код команды

Метка

Мнемокод

Комментарий

0000

AF

-

ХRА А

Очистить аккумулятор

0001

ЗЕ

-

MVI A, 38

Записать в аккумулятор

число 5610 = 38h16

0002

38

0003

06

-

MVI B, A3

Записать в регистр В число 16310 = a3h16

0004

A3

0005

80

-

ADD 8

Сложить 38h16 и a3h16 (5610 + 16310 = 21910 = db16)

0006

E7

-

RST 7

Прервать выполнение программы

(в аккумуляторе значение суммирования – число 21910 = db16)

Рисунок 2 – Простое сложение двух однобайтных чисел

Для получения разности двух чисел X и Y можно использовать эту же программу, заменив в ней по адресу 0005 код команды 80 (ADD B) кодом 90 (SUB В) команды вычитания содержимого регистра В из содержимого аккумулятора, разместив предварительно в регистрах В и А соответственно вычитаемое и уменьшаемое. Разность будет записана в аккумуляторе.

Программа C8N [3, стр. 28]. Программа осуществляет сложение n-байтных (до 256 байт) беззнаковых двоичных чисел, размещенных в оперативной памяти микропроцессорной системы.

Подпрограмма сложения двух целых беззнаковых двоичных чисел формата 8*N. Входные параметры: (В, С) – адрес слагаемого 1, (H, L) – адрес слагаемого 2, (Е) – количество N байт числа.

Выходные параметры: (В, С) – адрес суммы (совпадает с адресом 1-го слагаемого), СУ=1 – признак переполнения суммы, используются все регистры, сохраняются (В, С), (Е). Параметры: глубина стека 2, длина – 15 байт, время – (45+46* N).

Текст программы [3, стр. 28]:

0400 ORG 400H

0400 53 MOV D,E ;(D)−сохранение счетчика

0401 С5 PUSH B ;сохранение адреса 1

0402 AF XRA A ;CY=0

;многобайтное

;двоичное сложение

0403 OA C: LDAX B

0404 8Е ADC M ;сложение с учетом переноса

0405 02 STAX B

0406 03 INX B ; увеличение адреса 1

0407 23 INX H ; увеличение адреса 2

0408 1D DCR E

0409 C20304 JNZ C ;зацикливание

040C C1 POP B ;восстановление адреса 1

040D 5A MOV E,D ;восстановление счетчика

040E C9 RET ;если СУ=1,то переполнение

0000 END

Таблица 2 – Рабочая программа сложения C8N

Адрес

Код

команды

Метка

Мнемоника

Комментарий

0000

00

Не используется

0001

01

LXI B,001Ah

Загрузить в регистры B | C адрес первого слагаемого (10110 = 0065h16)

0002

1A

0003

00

0004

21

LXI H, 001Ch

Загрузить в регистры H | L адрес второго слагаемого (40010 = 0190h16)

0005

1C

0006

00

0007

11

LXI D,001Eh

Загрузить в регистры D | E адрес количество байтов числа (210 = 0002h16)

0008

1E

0009

00

000A

53

MOV D,E

Поместить значение регистра E в регистр D

000B

C5

PUSH B

Поместить значение регистра B | C в стек

000C

AF

XRA A

Очистить аккумулятор, СY = 0

000D

ОА

С:

LDAX B

Загрузить в аккумулятор значение регистра B

000E

8E

ADC M

Прибавить к содержимому аккумулятора два разряда числа 0190h

000F

02

STAX B

Передать результат в ячейку памяти, адресуемой регистровой парой B | C

0010

03

INX B

Указать на следующий адрес слагаемого 1

0011

23

INX H

Указать на следующий адрес слагаемого 2

0012

1D

DCR E

Уменьшить содержимое регистра E на 1

0013

C2

JNZ C

Переход, если содержимое аккумулятора не равно нулю

(NC Not Carry CY=0 P Positive M=0)

0014

0D

0015

00

0016

C1

POP B

Восстановить значение регистра B из стека

0017

5A

MOV E,D

Поместить значение регистра D в регистр E

0018

FF

RST 7

Прервать выполнение программы

0019

00

Не используется

001A

65

0065h

Данные

001B

00

001C

19

0190h

Данные

001D

01

001E

02

0002h

Данные

001F

00

Выходные параметры: (В, С) (совпадает с адресом 1-го слагаемого), т. е. о результат содержат ячейки 001А и 001В (001А = F516, 001В = 0116).

Так как 0065h16 + 0190h16 = 01F5h16 (10110 + 40010 = 50110), то результат верен.

Рисунок 3 – Результат работы программы C8N

Следует отметить, что данная программа работает некорректно в рассматриваемых эмуляторах.

Рассмотрим другой вариант программы. Массив однобайтных шестнадцатеричных чисел, например, 31, АВ, 86, 11 разместим в последовательных адресах памяти, например, 0015, 0016, 0017, 0018.

В качестве входных параметров для выполнения программы необходи­мо иметь адрес первого слагаемого, например, 0015, записанный в регистрах H, L, и число слагаемых − в регистре С. Выходным параметром будет являться сумма, старший байт которой записан в регистре В, а младший байт − в аккумуляторе.

Таблица 3 – Программа сложения массива однобайтных чисел

Адрес

Код

команды

Метка

Мнемоника

Комментарий

0000

00

Не используется

0001

0002

0003

21

15

00

LXI H,001B

Загрузить в регистры HL, адрес первого слагаемого

0004

0005

0E

04

MVI C, 04

Загрузить в регистр С количество слагаемых

0006

AF

XRA A

Очистить аккумулятор

0007

47

MOV B, A

Очистить регистр В

0008

86

C1:

ADD M

Прибавить к содержимому аккумулятора число из массива слагаемых

0009

000A

000B

D2

0E

00

INC M2

Если переноса нет, то идти на C2

000C

000D

04

B7

INR B

ORA A

Увеличить содержимое регистра В на I

Очистить флаг переноса

000E

23

C2:

INX H

Указать на следующий адрес слагаемого

000F

0D

DCR C

Уменьшить содержимое регистра С на 1

0010

0011

0012

C2

08

00

INZ

Если не все слагаемые, то идти на C1

0013

FF

RST 7

Прервать выполнение программы

0014

00

Не используется

0015

31

Данные

0016

AB

Данные

0017

86

Данные

0018

11

Данные

3116 + AB16 + 8616 + 1116 = 17316 (аккумулятор – 7316, регистр В – 0116)

Рисунок 4 – Сложение массива однобайтных чисел