- •«Национальный минерально-сырьевой университет «горный»
- •1 Контрольная работа №1
- •1.1 Задание на контрольную работу №1
- •1.2 Решение контрольной работы №1
- •2 Контрольная работа №2
- •2.1 Задание на контрольную работу №2
- •2.2 Решение контрольной работы №2
- •3.1.1 Составление программы сложения
- •3 Работа с микропроцессором кр580
- •3.1 Составление программ
- •3.1.2 Составление программы умножения
- •Приложение а (справочное) − Алфавитный перечень мнемокодов мп к580
- •Приложение б (справочное) − Символы и обозначения, используемые в командах мп
- •Литература
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 – Сложение массива однобайтных чисел
