МПС 3 курс Практические задания 03 Запись и выполнение простых программ - BysonHunter/Tavrich_college GitHub Wiki
🏠 Главная · Микропроцессорные системы · 3 курс · Практические работы по МДК.02.01 «Микропроцессорные системы»
Практическая работа №3
Запись и выполнение простых программ
Цель работы
Исследовать выполнение отдельных команд и простых программ микропроцессором КР580ВМ80 и закрепить навыки:
- ввода программ в эмулятор;
- пошагового выполнения;
- анализа регистров и памяти;
- использования различных способов адресации;
- применения условных переходов и циклов.
1. Подготовка
Перед каждой программой:
- очистите ОЗУ и регистры либо загрузите подготовленный образ;
- введите программу;
- заполните рабочие ячейки исходными данными;
- установите
PCна адрес начала программы; - выполняйте программу по командам;
- фиксируйте изменения регистров, флагов и памяти.
2. Задание 1. Инверсия байта
Программа читает байт из 0010h, инвертирует его и записывает результат в 0011h.
Исправленный листинг программы 2.1
LXI H, 0010h ; HL = 0010h
MOV A, M ; A = [0010h]
CMA ; A = NOT A
INX H ; HL = 0011h
MOV M, A ; [0011h] = A
HLT
В исходнике встречались опечатки LXI HI, LNX HL, HIT; они исправлены.
Ход работы
- Ввести программу.
- Записать в
0010hпроизвольный байт01h...FFh. - Выполнить программу по командам.
- Проверить
0011h.
Пример:
[0010h] = 50h
NOT 50h = AFh
[0011h] = AFh
Таблица наблюдений
| Объект | Начало | LXI H |
MOV A,M |
CMA |
INX H |
MOV M,A |
HLT |
|---|---|---|---|---|---|---|---|
| A | |||||||
| Флаги | |||||||
| H | |||||||
| L | |||||||
[0010h] |
|||||||
[0011h] |
Команда
CMAу 8080 инвертирует аккумулятор и не изменяет флаги. Если эмулятор показывает иное, зафиксируйте это как особенность модели.
3. Задание 2. Нахождение большего из двух байтов
Исходные значения:
[0010h]
[0011h]
Результат — большее значение — поместить в B.
Исправленный листинг программы 2.2
LDA 0010h ; A = [0010h]
MOV D, A ; сохранить первое число
LHLD 0011h ; L = [0011h], H = [0012h]
SUB L ; A = первое - второе
JNC FIRST_MAX ; заёма нет -> первое >= второго
MOV B, L ; максимум = второе
JMP DONE
FIRST_MAX:
MOV B, D ; максимум = первое
DONE:
HLT
Исправления
LHTD→LHLD;- комментарий к
JNCисправлен: переход выполняется при отсутствии Carry, а послеSUBэто означает отсутствие заёма.
LHLD 0011hдля этой задачи избыточна, поскольку одновременно считывает[0012h]вH. Она сохранена, так как исходная программа предназначена для изучения разных команд.
Графическое представление LDA 0010h

Команда:
LDA 0010h
занимает три байта:
3Ah 10h 00h
Адрес хранится в формате little-endian: младший байт адреса идёт раньше старшего.
4. Задание 3. Сложение двух чисел
Исходные числа:
[0010h]
[0011h]
Результат:
[0012h]
Программа 2.3
LXI H, 0010h ; HL = адрес первого числа
LXI B, 0011h ; BC = адрес второго числа
LDAX B ; A = [BC] = [0011h]
ADD M ; A = A + [HL]
INX B ; BC = 0012h
STAX B ; [0012h] = A
HLT
Таблица наблюдений
| № | Команда | A | Флаги | HL | [0010h] |
[0011h] |
[0012h] |
BC |
|---|---|---|---|---|---|---|---|---|
| 1 | LXI H,0010h |
|||||||
| 2 | LXI B,0011h |
|||||||
| 3 | LDAX B |
|||||||
| 4 | ADD M |
|||||||
| 5 | INX B |
|||||||
| 6 | STAX B |
|||||||
| 7 | HLT |
Пример:
[0010h] = 15h
[0011h] = 01h
[0012h] = 16h
5. Задание 4. Проверка равенства двух чисел
Исправленный листинг программы 2.4
START:
LXI H, 0010h
LXI B, 0011h
LDAX B ; A = [0011h]
XRA M ; A = [0011h] XOR [0010h]
JZ START ; если числа равны, XOR = 0
MOV B, A ; если не равны, B = XOR-разность
HLT
Исправлено IZ START → JZ START.
Что исследовать
- при равных числах программа возвращается к
START; - при неравных
Bполучает результат XOR.
Пример:
10h XOR 01h = 11h
Эта программа не только проверяет равенство, но и сохраняет XOR-разность, если числа не равны.
6. Задание 5. Копирование массива
Исходная методичка неоднозначно описывает размещение массива. По листингу источник начинается с 0000h, а приёмник — с 0010h.
Исправленный листинг программы 2.5
LXI H, 0000h ; источник
LXI D, 0010h ; приёмник
MVI B, 10h ; 10h = 16 элементов
COPY:
MOV A, M
STAX D
INX H
INX D
DCR B
JNZ COPY
HLT
Ход работы
- Записать 16 произвольных байтов в:
0000h...000Fh
- Выполнить программу.
- Убедиться, что копия появилась в:
0010h...001Fh
В исходном образце встречалась фраза «10 байтов». Здесь исправлено:
10h— это 16 десятичных элементов.
7. Задание 6. Загрузка двух 16-битных операндов
Даны четыре байта:
[0010h], [0011h], [0012h], [0013h]
Загрузить их в пары BC и DE.
Один из вариантов:
LDA 0010h
MOV B, A
LDA 0011h
MOV C, A
LDA 0012h
MOV D, A
LDA 0013h
MOV E, A
HLT
В отчёте явно укажите, какой байт каждого 16-битного операнда считается старшим, а какой младшим.
8. Задание 7. Инверсия байта с результатом в D
LXI H, 0010h
MOV A, M
CMA
MOV D, A
HLT
- Поместить исходное значение в
0010h. - Выполнить программу.
- Проверить результат в
D.
Пример:
[0010h] = 00h
D = FFh
9. Контрольные вопросы
- Что такое мнемоника команды?
- Чем машинный код отличается от мнемоники?
- Что означает
Mв командахMOV A,MиADD M? - Какой способ адресации использует
LDA 0010h? - Какой способ адресации использует
MVI A,25h? - Как работает
LDAX B? - Как после
SUBопределить наличие заёма? - Что делает
JNC? - Почему
LHLDзагружает два байта? - Что делает
CMA? - Зачем используется
HLT? - Почему
10hравно 16, а не 10?
10. Содержание отчёта
- Цель работы.
- Перечень исследуемых команд.
- Исправленные листинги программ.
- Исходные данные для каждого задания.
- Заполненные таблицы.
- Скриншоты эмулятора.
- Ответы на контрольные вопросы.
- Анализ результатов.
- Вывод.