Пересылка массива информации из одной области памяти в другую
Адрес | Машинный код | Метка | Мнемокод | Комментарий |
MVI D | загрузка счетчика | |||
N | ||||
LXI Н | загрузка адресного указателя | |||
NN | исходного массива | |||
NN | ||||
LXI B | загрузка адресного указателя | |||
DD | результирующего массива | |||
DD | ||||
7E | M2 | MOV A,M | пересылка числа из памяти в АКМ | |
STAX B | пересылка числа из АКМ в память | |||
850А | DCR D | уменьшение счетчика на единицу | ||
850В | CA | JZ, M1 | пересылка массива закончена? | |
850С | ||||
850D | ||||
850Е | INX H | переход к следующему адресу в HL | ||
850F | INX B | переход к следующему адресу в BC | ||
C3 | JMP, M2 | организация цикла | ||
Ml | NOP | окончание программы |
Перед выполнением программы исходный массив чисел заносится в память, с помощью командных клавиш, начиная с адреса NNNN (см. Приложение 4).
В ряде случаев возникает необходимость выбрать из массива информации данные, представляющие собой ряд максимальных, либо минимальных величин. Предположим, что необходимо написать программу для решения следующей задачи. Дан массив А1, состоящий из N однобайтовых чисел. Необходимо переписать из массива А1 в массив В1 все числа в диапазоне от Н1 до Н2.
В программе выборки из массива чисел заданного интервала использованы следующие исходные данные и обозначения:
N - количество элементов исходного массива
L - счетчик, указатель длины исходного массива
ВС - адресный указатель исходного массива
NNNN - адрес ячейки памяти, где хранится первое число исходного массива.
DE - адресный указатель результирующего массива
DDDD - адрес ячейки памяти, куда будет записано первое число результирующего массива.
Н1 - нижний предел диапазона выборки
Н2 - верхний предел диапазона выборки
8100 - адрес начала программы
Перед выполнением программы исходный массив чисел А1 заносится в память с помощью командных клавиш, начиная с адреса NNNN (см. Приложение 5)
Таблица 2
Выборка из массива данных чисел заданного интервала
Адрес | Машинный код | Метка | Мнемокод | Комментарий |
2E | MVI L | загрузка счетчика | ||
N | ||||
LXI B | загрузка адресного указателя | |||
NN | исходного массива | |||
NN | ||||
LXI D | загрузка адресного указателя | |||
DD | результирующего массива | |||
DD | ||||
0A | M2 | LDAX B | выборка числа из массива А1 | |
FE | CPI | сравнение с нижним пределом - | ||
810А | H1 | числом H1 | ||
810В | DA | JC, M1 | переход на метку Ml, если | |
810С | число < Н1 | |||
810D | ||||
Таблица 2 (продолжение) | ||||
810Е | FE | CPI | сравнение с верхним пределом - | |
810F | Н2 | числом Н2 | ||
D2 | JNC, M1 | переход на метку Ml, если | ||
число > Н2 | ||||
STAX D | запись числа, попавшего в | |||
заданный интервал, в память | ||||
INX D | переход к следующему адресу в DE | |||
M1 | INX B | переход к следующему адресу в BC | ||
2D | DCR L | уменьшение счетчика | ||
C2 | JNZ, M2 | организация цикла | ||
811А | NOP | окончание программы |
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. По заданию преподавателя подготовить и выполнить программы пересылки массива информации из одной области памяти в другую и выбрать из массива данных числа заданного интервала. Исходные данные необходимо взять из Приложений 4 и 5 соответственно.
СОДЕРЖАНИЕ ОТЧЕТА
1. Краткое описание цели работы и результатов самостоятельной подготовки к лабораторному занятию.
2. Тексты программ выполнения лабораторной работы.
3. Протокол, отражающий последовательность действий на пульте отладочного устройства и результаты выполнения команд МП К580ИК80А с записью последовательности нажатых клавиш на пульте отладочного устройства.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Назовите назначение разрядов регистра признаков МП К580ИК80А?
2. По каким условиям записывается 1 в каждый из разрядов регистра признаков МП К580ИК80А?
3. Какие функции выполняют команды перехода?
4. Какие существуют способы изменения последовательности выполнения команд?
5. Как осуществляется выполнение команды перехода?
6. В каких байтах располагаются младшие и старшие разряды в командах перехода?
7. По алгоритму задачи необходимо принять решение "больше". Какими командами можно это реализовать?
8. По алгоритму задачи необходимо принять решение "равно". Какими командами можно это реализовать?
9. Как организуется цикл в системе команд МП К580ИК80А?
10. Какое максимальное число команд может быть в теле цикла?
11. Какое максимальное число команд имеет параметр цикла?
12. Как организуется работа с массивами?
13. Какая область памяти отладочного устройства может использоваться под запись массива данных?
14. С какой целью следует оставлять "пустые" команды в программе?
15. Назовите способы разработки и отладки программ для микропроцессоров и микро-ЭВМ?
16. Охарактеризуйте достоинства и недостатки используемой в отладочном устройстве технологии разработки и отладки программ?
ЛАБОРАТОРНАЯ РАБОТА 4
ПОДПРОГРАММА И СТЕК
ЦЕЛЬ РАБОТЫ: Исследование особенностей записи и обращения к подпрограммам, изучение методов использования стека при разработке программ с помощью учебно-отладочного устройства "Электроника 580".
Продолжительность лабораторного занятия - 4 часа, самостоятельная подготовка - 4 часа.
СОДЕРЖАНИЕ ЛАБОРАТОРНОЙ РАБОТЫ
Учитывая ограниченные возможности памяти при разработке программ, необходимо стремиться сделать их как можно короче. С этой целью часть программы, которая неоднократно повторяется, или программа, которая часто используется, могут быть использованы в виде подпрограмм - последовательностей команд, выполнение которых может быть вызвано из любого места программы любое количество раз. Процесс передачи управления к подпрограмме называется ее вызовом.
Для вызова подпрограмм и возврата из них используются команды CALL<A2>,<AI> и RET.
При работе с подпрограммами используется стековая память. Стек - специально организованная область ОЗУ, используемая для временного сохранения данных или адресов. Число, записанное в стек последним, извлекается из него первым.
Команда RET помещает в программный счетчик последнее записанное на данный момент в стеке число. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна заканчиваться командой RET.
Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, то есть осуществить вызов одной подпрограммы из другой. Уровень вложенности определяется размером стека.
Существуют также команды условного вызова подпрограмм и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (аналогично командам условного перехода) без использования дополнительных команд.
Помимо команд вызова подпрограмм и возврата из них, со стеком можно обмениваться информацией с помощью команд PUSH<R> (записать в стек содержание обозначенного регистра МП БИС) и POP<R> (записать данные из стека в обозначенный регистр МП БИС)