Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа №1. Простые вычисления
Вариант 4
Задание
Написать на языке ассемблера микропроцессора КР580ВМ80А программу, реализующую вычисления по заданному арифметическому выражению. Оттранслировать программу в машинные коды и выполнить ее отладку на УОУ “Электроника-580”. Значения исходных переменных Х и Y (для выполнения контрольного примера) в таблице заданий представлены в десятичной форме, перед выполнением программы они размещаются в ОЗУ по указанным в шестнадцатеричной форме адресам. Результат выполнения программы Z также заносится в ОЗУ по указанному адресу.
Отчет по лабораторной работе должен содержать:
Решение
Необходимо составить программу, реализующую следующую функцию:
Z=min{|A*X-Y+B|, C}
Так как ассемблер является языком низкого уровня, т.е. его команды оперируют непосредственно со структурными элементами микропроцессорной системы, программист перед началом составления программы вычислений должен знать, в какой форме будут представлены входные и выходные переменные, по каким адресам ОЗУ они будут размещены. Из задания к лабораторной работе видно, что исходные переменные X, Y и результат вычислений Z являются числами со знаком, поэтому они представляются в дополнительном коде. Длина их не превышает одного байта. Расположим переменные Х и Y в ОЗУ по адресам 8300Н и 8301Н соответственно. Результат Z после окончания вычислений разместим в ОЗУ по адресу 8300Н, т.е. на месте исходной переменной X.
Создание программы начнем с составления алгоритма, соответствующего порядку вычислений при нахождении значения заданной функции. В общем случае алгоритмы решения задач на компьютере могут составляться в несколь ко этапов со все более подробной их детализацией. На заключительном этапе алгоритм составляется с учетом особенностей его конкретной реализации на той или иной микро-ЭВМ, с учетом особенностей системы команд микропроцессора. В нашем случае задача очень простая и сразу же может быть разработан максимально подробный алгоритм, ориентированный на систему команд микропроцессора КР580ВМ80А.
Адрес 8300Н используется в ходе выполнения программы несколько раз, сначала для считывания переменной Х, а после окончания вычислений для занесения значения Z. Поэтому для упрощения обращения к ячейке памяти с этим адресом занесем его в регистровую пару HL, наиболее удобную для организации косвенной регистровой адресации.
Умножение на целое число в функции реализуется путем многократного сложения.
Так как данные представляются в дополнительном коде, то для получения абсолютной величины значения Y-25, в случае, если оно отрицательно, используются операции инверсии и добавления единицы.
После составления алгоритма записывается соответствующая программа на языке ассемблера. Полученные алгоритм решения задачи и текст программы с необходимыми комментариями приведены ниже. Команды, на которые в программе есть переходы, помечены метками ADR1, ADR2 и FIN.
При отладке программы на УОУ “Электроника-580” завершающей программу командой является RST 4, которая выполняет функцию “возврат к монитору”.
Получение машинных кодов команд программы при работе на УОУ “Электроника-580” осуществляют вручную с помощью таблицы команд. Альтернативный вариант трансляции использование программы кросс-ассемблера AVMAC85.
Листинг трансляции рассматриваемой программы также приведен ниже. В нем показан пример введения и использования символьной константы CH1, которой присваивается с помощью команды транслятора EQU значение 17. Начальный адрес размещения рассматриваемой программы в памяти программ отладочного устройства определяется равным 8200H с помощью команды транслятора ORG. Длина полученного кода программы составляет 28 байт.
Первая команда LXI H, 8300H трехбайтная и занимает три ячейки памяти, причем во второй ячейке размещается младший байт, а в третьей старший байт числа 8300H. Далее следуют две однобайтные команды, потом двухбайтная команда ADI CH1, занимающая ячейки 8205H и 8206H, причем во второй ячейке размещается константа CH1=17=11H. Далее опять следует однобайтная команда и т.д.
В командах переходов при трансляции вместо символических адресов меток подставляются соответствующие им конкретные физические адреса памяти 8212H, 821AH и 821BH. Так как переходы в примере выполняются вперед по программе, то при ручной трансляции этих команд физические адреса переходов еще неизвестны, и необходимо зарезервировать две ячейки памяти под второй и третий байты команды перехода. Затем, когда процесс трансляции дойдет до команды, на которую выполняется переход, и становится известным физический адрес ее размещения в памяти, зарезервированные под этот адрес байты могут быть заполнены.
После ввода в память УОУ программы в машинных кодах необходимо подготовить и ввести в соответствующие ячейки памяти исходные переменные примера. Далее проводится отладка программы проверка правильности ее функционирования.
Отладка программы может быть также выполнена с помощью отладчика-симулятора AVSIM85.
Для рассмотренной программы были получены следующие результаты:
При X1=-16=F1,
При X2=25=2F,
При Y1,2=-24=C6
A=3; B=14; C=58
Адрес X = 8301H
Адрес Y = 8300H
ЛИСТИНГ ТРАНСЛЯЦИИ ПРОГРАММЫ
LXIH 8301 8301 21 00 84
MOV A,M 8302 7E
ADD A 8303 87
ADD M 8304 86
MOV B,A 8305 47
LDA 8300H 8306 3A 0A 83
SUD B 8307 90
JP ADR1 8308 F2
CMA 8309 3C
INR A 830A B8
ADR1:ADI 14 CPI 58 830B C6 11 83
JP ADR2 830C FE
MOV M,A 830F 830E
JMP FIN 8310 C3 12 83
ADR2:MVI M58 8311 36
FIN HLT 8312 76
начало
↓
8301 H,L
↓
M(H,1>)>→A
↓
<A>+<A>→A
↓
<A>+J→A
↓
<A>→B
↓
<M(8300)>→A
↓
<A>-0→A
↓
<A> <=0?
<A>→A
↓
<A>-1→A
↓
<A> <=<B>?
↓
<B>→M(<H,L>)
↓
<A>M(<H,L>)
↓
конец