МПС 3 курс Практические задания 06 Составление сложных программ на ассемблере - BysonHunter/Tavrich_college GitHub Wiki
🏠 Главная · Микропроцессорные системы · 3 курс · Практические работы по МДК.02.01 «Микропроцессорные системы»
Практическая работа №6
Составление сложных программ на языке ассемблера
Цель работы
Закрепить навыки разработки сложных программ для КР580ВМ80:
- работа с массивами;
- подпрограммы
CALL/RET; PUSH/POP;- многобайтовая арифметика;
- учёт переноса
CY; - маскирование и побитовые операции;
- вывод данных через порт.
1. Теоретические сведения
Многобайтовое сложение
Для сложения младших байтов используется ADD, а для старших — ADC, чтобы учитывать перенос:
младшие байты: ADD
старшие байты: ADC
Многобайтовое вычитание
младшие байты: SUB
старшие байты: SBB
Подпрограммы
CALL SUBROUTINE
...
SUBROUTINE:
; код
RET
Сохранение регистров
PUSH B
...
POP B
Маскирование
ANI mask
2. Задание 1. Умножение массива на коэффициент
Исходный массив начинается с:
0050h
Коэффициент:
[004Ah]
Исправление неоднозначности
В исходной методичке не указано количество элементов массива. В этой версии вводится:
[004Bh] = N — количество элементов
Результирующий массив начинается с:
0060h
Ограничение базового варианта
Чтобы результат каждого умножения оставался однобайтовым, принять:
исходный элемент: 0...50
коэффициент: 0...5
Если преподавателем задан больший коэффициент, необходимо отдельно обработать переполнение.
Требования
- Использовать подпрограмму умножения.
- Реализовать умножение повторяющимся сложением.
- Обработать
Nэлементов. - Не изменять исходный массив.
3. Задание 2. Годовая сумма продаж двух магазинов
Магазин 1:
0100h...010Bh
Магазин 2:
0110h...011Bh
Каждый элемент: 1...255.
Максимальная сумма за 12 месяцев:
12 × 255 = 3060 = 0BF4h
Поэтому сумма должна быть двухбайтовой.
Адреса результатов
В исходной методичке адреса результатов не заданы. Для однозначности использовать:
0120h — магазин 1, младший байт
0121h — магазин 1, старший байт
0122h — магазин 2, младший байт
0123h — магазин 2, старший байт
0124h — общая сумма, младший байт
0125h — общая сумма, старший байт
Требования
- обработать 12 элементов каждого массива;
- учитывать
CY; - общую сумму вычислить как 16-битное число.
4. Задание 3. Сумма пяти двухбайтовых чисел
Пять 16-битных чисел занимают 10 байт:
0050h...0059h
Исправление размера результата
Максимальный результат:
5 × 65535 = 327675 = 04FFFBh
Это значение требует трёх байтов.
Результат сохранить:
0060h — младший байт
0061h — средний байт
0062h — старший байт
Требования
- Сложить младшие байты.
- Сложить старшие байты с
ADC. - Накопить перенос в третьем байте.
- Проверить крайний случай
FFFFh × 5.
5. Задание 4. Выделение 3-го и 5-го битов
Исходное число:
[0050h]
В исходнике указаны маски:
00000100b = 04h
00010000b = 10h
Уточнение нумерации
Эти маски соответствуют:
- 3-му биту от младшего разряда, если считать биты как 1,2,3,...;
- в стандартной нумерации с нуля — битам
2и4.
Использовать:
маска 3-го бита = 04h
маска 5-го бита = 10h
Результаты
Для однозначности записать:
[0051h] = 00h или 01h — значение 3-го бита
[0052h] = 00h или 01h — значение 5-го бита
После ANI при необходимости нормализовать результат до 0/1.
6. Задание 5. Вывод Ф.И.О. и группы
Вывести на виртуальный монитор:
ФАМИЛИЯ ИМЯ
ГРУППА 3КСК27
или номер своей группы.
Начать с 5-й строки и разместить текст по центру.
Уточнение по кодировке
Старый эмулятор может не поддерживать Unicode/UTF-8. Используйте кодовую таблицу, которую поддерживает конкретный монитор КР580. Если кириллица отсутствует, по согласованию с преподавателем используйте латинскую транслитерацию.
Центрирование
Если текстовый экран имеет ширину 39 символов, стартовую позицию можно определить как:
Xstart = floor((39 - L) / 2)
где L — длина строки.
Способ позиционирования зависит от протокола монитора конкретной версии эмулятора.
7. Рекомендуемая организация подпрограмм
Полезно выделить подпрограммы:
ADD16
MUL8
PRINT_CHAR
PRINT_STRING
GET_BIT
Для каждой подпрограммы определить:
- входные регистры;
- выходные регистры;
- какие регистры изменяются;
- какие сохраняются через
PUSH/POP.
8. Таблица тестирования
| Задание | Тест | Исходные данные | Ожидаемо | Получено | Статус |
|---|---|---|---|---|---|
| 1 | 1 | ||||
| 1 | 2 | ||||
| 2 | 1 | ||||
| 3 | 1 | ||||
| 4 | 1 | ||||
| 5 | 1 |
9. Содержание отчёта
- Титульный лист.
- Цель.
- Краткие теоретические сведения.
- Листинги всех программ.
- Скриншоты выполнения.
- Таблицы тестирования.
- Анализ переполнений и корректности.
- Вывод.