МПС 3 курс Практические задания 04 Составление программ КР580ВМ80 - BysonHunter/Tavrich_college GitHub Wiki

🏠 Главная · Микропроцессорные системы · 3 курс · Практические работы по МДК.02.01 «Микропроцессорные системы»


Практическая работа №4

Составление программ на базе эмулятора КР580ВМ80

Цель работы

Совершенствовать навыки разработки программ для КР580ВМ80/Intel 8080:

  • линейных алгоритмов;
  • ветвлений;
  • циклов;
  • работы с массивами;
  • многобайтовой арифметики;
  • подпрограмм CALL/RET.

Общие требования

Для каждой задачи:

  1. составить словесный алгоритм;
  2. определить используемые регистры;
  3. составить листинг на ассемблере;
  4. ввести программу в эмулятор;
  5. подготовить минимум два тестовых набора;
  6. выполнить программу;
  7. проверить результат;
  8. приложить скриншоты и таблицу тестирования.

В конце программы должен быть предусмотрен корректный останов HLT.


Задача 1. Сумма двух однобайтовых величин

Исходные данные:

B = U1
C = U2

Найти:

U_sum = U1 + U2

Уточнение

Сумма двух байтов может быть больше 255, поэтому одного регистра D недостаточно для полного результата.

В этой версии задания требуется:

D = младший байт суммы
E = 00h, если переноса нет
E = 01h, если CY = 1

То есть пара ED хранит полный 9-битный результат.

Проверьте минимум два случая:

10 + 20
200 + 100

Задача 2. Минимум из трёх значений

В регистрах:

D = Детали_A
E = Детали_B
H = Детали_C

Найти минимальное значение и записать в:

L

Используйте CMP либо вычитание с анализом CY/Z.

Проверьте случаи:

  • минимум — первое значение;
  • минимум — второе;
  • минимум — третье;
  • два значения равны.

Задача 3. Максимум из двух значений в памяти

[2000h] = T1
[2001h] = T2

Записать большее значение в:

[2002h]

Если значения равны, можно записать любое из них.


Задача 4. Максимальная сторона треугольника

Исходные данные:

[2070h] = A
[2071h] = B
[2072h] = C

Найти:

max(A,B,C)

Результат:

[2075h]

В этой задаче проверять существование треугольника не требуется, если преподавателем не указано иное.


Задача 5. Периметр треугольника

[2050h] = A
[2051h] = B
[2052h] = C

Вычислить:

P = A + B + C

Максимум:

255 + 255 + 255 = 765 = 02FDh

Поэтому результат должен быть двухбайтовым:

[2060h] = младший байт
[2061h] = старший байт

Необходимо корректно учитывать CY.


Задача 6. Сумма восьми измерений

Массив:

2100h...2107h

Содержит 8 значений температуры 0...50.

Максимальная сумма:

8 × 50 = 400 = 0190h

Следовательно, результат сразу следует считать двухбайтовым:

[2108h] = младший байт суммы
[2109h] = старший байт суммы

Задача 7. Максимум массива и его индекс

Массив из 15 элементов:

2300h...230Eh

Найти максимальный элемент.

Результаты:

[230Fh] = максимальное значение
[2310h] = индекс максимального элемента, 0...14

Если максимум встречается несколько раз, рекомендуется сохранять индекс первого найденного максимума.


Задача 8. Максимальное абсолютное отклонение

Эталон:

[2200h] = R

Массив из 10 измерений:

2201h...220Ah

Для каждого элемента вычислить:

D = |Xi - R|

Найти максимальное D.

Результат:

[2210h]

Подсказка

если Xi >= R: D = Xi - R
иначе:       D = R - Xi

Задача 9. Количество элементов выше порога

Массив из 12 байтов:

2400h...240Bh

Порог:

[240Ch] = L

Подсчитать элементы, для которых:

Xi > L

Результат:

[240Dh]

Максимальный счётчик равен 12, поэтому одного байта достаточно.


Задача 10. Работа с подпрограммами

Исходные стороны:

[2500h] = A
[2501h] = B
[2502h] = C

Необходимо:

  1. найти максимум → [2510h];
  2. найти минимум → [2511h];
  3. вычислить периметр →:
    • [2512h] — младший байт;
    • [2513h] — старший байт.

Требование

Организовать минимум три подпрограммы:

FIND_MAX
FIND_MIN
CALC_PERIMETER

Вызовы:

CALL FIND_MAX
CALL FIND_MIN
CALL CALC_PERIMETER
HLT

Каждая подпрограмма должна завершаться:

RET

Если подпрограмма изменяет регистры, которые нужны вызывающему коду, используйте PUSH/POP или явно документируйте это.


Таблица тестирования

Тест Исходные данные Ожидаемый результат Полученный результат Статус
1
2

Содержание отчёта

  1. Титульный лист.
  2. Цель.
  3. Алгоритмы задач.
  4. Листинги программ.
  5. Машинные коды/экспорт из эмулятора — если требуется.
  6. Скриншоты.
  7. Таблицы тестирования.
  8. Анализ ошибок и переполнений.
  9. Вывод.

← Практическая работа №3 · Практическая работа №5 →

Оригинал материала на GitHub