|
Микропроцессоры лаба. Отчет по лабораторной работе 7 Подключение внешних устройств. Ввод вывод, маскирование данных, и организация условных переходов
ОТЧЕТ
по лабораторной работе № 7
«Подключение внешних устройств. Ввод — вывод, маскирование данных, и организация условных переходов»
по дисциплине
«Основы микропроцессорной техники»
Выполнил:
| Курганов В.В.
| Группа:
| ПС2-51
| Проверил: Суятинов С.В.
Москва 2021
Цель работы: исследование особенностей записи и обращения к подпрограммам. Краткие сведения из теории Существуют подпрограммы, очень часто используемые одной и той же основной программой или одним и тем же программистом в различных программах. Бывает, что одна подпрограмма так часто используется, что она помещается в ПЗУ постоянно. Передача управления программой в подпрограмму выполняется одной командой вызова. Возврат или восстановление управления основной программой осуществляется командой возврата. Кроме того, команды помещения в стек, извлечения из стека и загрузки указателя стека используются также как текущие вместе с подпрограммой.
Для вызова подпрограммы и возврата из них используются команды CALL2>1> и RET.
Команда CALL2> <А1> загружает в программный счетчик МП БИС содержимое байтов <А2><А1>, записанных в последующих двух адресах памяти после адреса, где записан код команды CALL (CD). Содержимое байта <А2> записывается в младший байт PCL программного счетчика, а третий байт 1> команды — в старшин байт РСН программного счетчика, при этом МП БИС автоматически сохраняет в стеке адрес основной программы, к которому она будет обращаться после выполнения подпрограммы.
Стек - специально организованная область ОЗУ, используемая микро-ЭВМ для временного сохранения данных или адресов. Число, записанное в стек последним, извлекается из него первым.
Команда RET (С9) помещает в программный счетчик последнее число, записанное на данный момент в стеке. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна кончаться командой RET.
Автоматическое сохранение н восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т. е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микро-ЭВМ определяется лишь размером стека.
Существуют также команды условного вызова подпрограммы и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (индикаторов) (аналогично командам условных переходов) без использования дополнительных команд. Все команды условного вызова подпрограммы трехбайтные, во втором и третьем байтах сообщается начальный адрес подпрограммы. Команды вызова подпрограмм и возврата из них используют стек и внутренний регистр МП SP (STACK POINTER) для адресации к стеку.
Помимо команд вызова подпрограмм и возврата из них, со стеком можно обмениваться информацией с помощью команд PUSH (записать в стек coдержимое обозначенного регистра R микропроцессора) и POP (записать данные из стека в обозначенный регистр R микропроцессора).
Эти команды являются однобайтными, и в них содержится указание пары регистров микропроцессора.
При записи в стек содержимого пары регистров или программного счетчика по адресу SP—1 записывается содержимое старшего регистра из указанной пары или старший байт РСН программного счетчика, а по адресу SP—2 в стек записывается содержимое младшего регистра из указанной пары младшего байта PCL программного счетчика.
При записи из стека данных в пару регистров или программный счетчик в младший регистр пары или PCL записывается число из адреса, указанного в указателе стека SP, а в старший регистр пары или РСН — число, записанное по адресу SP+1. В результате выполнения команды содержимое указателя стека SP увеличивается на 2. Данные в памяти не изменяются, а лишь происходит их чтение и увеличение содержимого SP.
Таким образом, при записи данных адреса стека растут от больших к меньшим, а указатель стека SP всегда содержит последний адрес стека, в котором записано число.
При разработке программ необходимо первоначально назначать область стека, записывая в SP адрес с помощью команды LXT SP2>1> или команды SPHL.
Все операции со стеком должны быть сбалансированы, т. е. каждая подпрограмма должна содержать равное количество команд PUSH и POP и оканчиваться командой RET. В противном случае выполнение команды RET в конце подпрограммы приведет к записи в программный счетчик случайного числа из стека. Адрес возврата в основную программу будет потерян, что приведет к нарушению последовательности ее выполнения.
В начале каждой программы в стеке сохраняют содержимое всех задействованных при ее выполнении регистров с помощью команд PUSH. В конце подпрограммы восстановление содержимого регистров осуществляется с помощью команд POP. Восстановление содержимого должно осуществляться в обратной последовательности по отношению к их записи в стек.
Обычно в виде подпрограмм записываются многократно используемые фрагменты программ, например подпрограмма выдачи звукового сигнала, подпрограмма обслуживания клавиатуры и дисплея и т. д.
Пример 1.
Разработка и оформление подпрограммы временной задержки.
Программная реализация временной задержки использует метод программных циклов, при котором в некоторый рабочий регистр блока РОН загружается число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое рабочего регистра не станет равным нулю, что интерпретируется программой как момент выхода из программного цикла. Время задержки при этом определяется числом, загруженным в рабочий регистр, и временем выполнения команд, образующих программный цикл.
Схема алгоритма такой программы показана на рис. 7.4. Программа имеет символическое имя TIME и в случае вызова ее основной управляющей программой по команде CALL TIME должна завершаться командой возврата RET.
Текст подпрограммы, реализующей алгоритм, показанный на рис. 7.4, приводится ниже.
Метка
| Мнемокод
| КОП
| Пояснения
| TIME:
| MVI В, X
| 06Н
| загрузка в регистр В числа X
| COUNT: ; уменьшить на 1 содержимое В
| DCR В
| 05Н
| Уменьшить на 1 содержимое В
|
| JNZ COUNT
| С2
| цикл, если В 0
|
| RET
| С9
| Возврат в основную программу, если В=0
| Обращение к подпрограмме временной задержки осуществляется по команде CALL TIME.
Загрузите программу в симулятор, приведите экранную форму, подобную той, которая приведена на рис.1.
Рис.1. Экранная форма
Пример 2.
Использование подпрограммы в микропроцессорной системе мониторинга состояния оборудования
На рис. 2а, приведена структурная схема алгоритма мониторинга. В задачу МП входит ввести два отобранных числа, образовать их сумму и сохранить ее.
Этой процедуре соответствуют три кадра в начале схемы. Затем сумма должна быть умножена на масштабный коэффициент. Результат масштабирования размещается в памяти. Это связано с тем, что сумма (в третьем кадре) должна быть восстановлена в аккумуляторе. Затем, значение суммы сравнивается с заданным значением, равным 10Н. Результат сравнения определяет значение индикатора в регистре признаков и служит знаком принятия решения. В том случае, если сумма равна или больше10Н, программа выводится на сигнализацию тревоги, если меньше10Н, циклится и снова вводит выборку чисел.
Такой тип программ мог бы быть использован в промышленных устройствах, когда сумма двух входов должна постоянно контролироваться; быть подвержена масштабированию, а затем размещена в памяти; контролироваться по крайней мере один раз в секунду для определения, не приняла ли она опасного значения, и если да, то программа должна выдать аварийный сигнал АС.
Программа задумана для образования циклов неопределенно долго и принимает новые наборы данных в каждом цикле. Она покидает цикл для процедуры аварийной сигнализации только в случае возникновения соответствующей ситуации. В этом случае оператор или другая программа выдает процедуру отработки аварийного состояния. Это показано на структурной схеме кружком.
Каждый кадр схемы эквивалентен одной операции МП. Выделенная рамкой ячейка, представляет собой группу команд, называемую подпрограммой «умножить».
В табл. 1 представлена программа на ассемблере, структура которой показана на рис. 2б. Используются только команды, которые составляют часть состава команд типового МП (список, относящийся к подпрограммам умножения, на рисунке не приведен).
Три первые команды (табл.1) заносят в указатель стека, в регистры HL и аккумулятор А соответственно 20С0Н, 2040Н и 00Н.
Таблица 1. Программа контроля оборудования
КОП
| Метка
| Мнемоника
| Операнды
| Комментарий
| 31
|
| LXI P
| P, 20C0H
| Поместить 20C0H в указатель стека
|
| START
| LXI H
| H, 2040H
| Поместить 2040Н в пару HL (указатель адреса основной программы)
| AF
|
| ХRА
| A
| Сброс аккумулятора в 00Н
| 86
|
| ADD
| M
| Сложить (А) с содержимым ячейки памяти 2040Н (сложить первое слагаемое с содержимым ячейки памяти 2040Н)
| 23
|
| INX H
| H
| Инкрементировать пару HL до 2041Н
| 86
|
| ADD
| M
| Сложить А с содержимым ячейки памяти 2041Н (сложить второе число с содержимым ячейки памяти 2041Н)
| F5
|
| PUSH PSW
| PSW
| Поместить в стек (А) и индикаторы
| CD
|
| CALL
| MULTIPLY
| Вызов подпрограммы MULTIPLY в ячейку памяти 2050Н
| 23
|
| INX H
| H
| Инкрементировать пару HL до 2042Н
| 77
|
| MOV M,A
| M, A
| Поместить произведение в ячейку памяти (HL)= 2042Н
| F1
|
| POP
| PSW
| Извлечь из стека и восстановить А и индикаторы
| FC
|
| CPI
| 10H
| Сравнить (А) и 10Н. Если (А) <10Н то CY= 1; иначе CY = 0
| JC
|
| JC
| START
| Перейти к START (ячейка памяти 2003Н), если CY =1; если нет, продолжать последовательно
| 76
|
| HLT
|
| Остановить МП
|
Рис. 2. Структурная схема программы контроля оборудования (а) и ее развитие (б) Четвертая складывает содержимое (А) (т. е. 00Н) с содержимым ячейки памяти, на которую указывает пара HL (адрес 2040Н). Обратимся к рис. 3, который представляет собой основную программу, данные, подпрограмму и память стека, использованные в этом примере.
Заметим, что содержимым памяти по адресу 2040Н, сложенным с (А) является 05Н. После выполнения четвертой команды содержимым (А) является 05Н (00Н+ 05Н=05Н).
Пятая команда основной программы инкрементирует пару HL.
Шестая складывает содержимое памяти по адресу 2041Н с (А), где находится число 5. Эта ячейка памяти 2041Н содержит 09Н (см. рис. 3). Регистр А содержит 05Н, а сумма после второго сложения ADD М (здесь М= HL=2041Н ) равна 0ЕН =1410 в регистре А является суммой двух выбранных чисел.
Следующей командой основной программы является PUSH PSW, которая сохраняет содержимое аккумулятора и индикатора. Эта команда необходима, потому что следующая команда вызова CALL MULTIPLY разрушит содержимое этих регистров, выполняя подпрограмму умножения.
Операция вызова CALL MULTIPLY помещает адрес команды в последовательности основной программы (в нашем примере 200ЕН) в стек, затем переходит к адресу первой команды подпрограммы (адрес 2050Н). Этот вызов показан на рис. 3.
Команду вызова подпрограммы CALL MULTIPLY можно рассматривать как команду, которая просто умножения содержимого А на число.
Подпрограмма в нашем примере осуществляет умножение 0ЕН на два, т.е. 0ЕНх210=1СН(2810) Таким образом, полученное произведение, помещенное в аккумулятор к моменту возврата, будет равно 1СН.
Рис. 3 Содержимое памяти рассматриваемой программы
После возврата в основную программу, адресом следующей последовательной команды становится 200ЕН.
Команда INX H инкрементирует пару HL. Далее произведение, выполненное подпрограммой, помещается в память по адресу 2042Н командой MOV М, А.
Вспомним, что команды помещения в стек и извлечения из него парные. Только что мы поместили в стек содержимое аккумулятора и индикаторов командой PUSH PSW, мы их восстановим теперь командой POP PSW. Это произведение будет тестировано последующей командой CPI.
Две следующие команды основной программы предназначены для тестирования суммы в аккумуляторе. Команда сравнить CPI непосредственно выполняет операцию вычитания 0ЕН - 10H = FEH с использованием дополнительного кода числа — 210. Содержимое А меньше чем 10Н. Поэтому индикатор переноса СY установлен в 1. Команда JC (ПЕРЕЙТИ) проверяет индикатор. Если индикатор переноса установлен в 1, то МП переходит к символическому адресу START, который является не чем иным, как началом цикла команды LXI Н (адресация 2003Н, см. рис. 3).
Практическая часть
Разместить программу Табл1 в памяти симулятора, и протестировать ее доступные части. Представить экранные формы.
Сформулировать свою упрощенную задачу диагностики оборудования и составить программу обработки данных. Подпрограмму умножения на 2 реализовать как сложение числа с самим собой.
Проверка правильности числа: если число верно, программа завершится, иначе будет работать, пока не будет введено правильное число.
Предложить варианты проверки правильности работы программы
Задачи для самоподготовки
Изучите, используя симулятор варианты выполнения команд CALL <А1, RET, RST1 и HLT. Рассмотрите два варианта завершения программы, используя RST1, RST0 и HLT. Обратите внимание, что после команды останова HLT, процессор запускается только по сигналу Restart.
2. Ознакомьтесь с командами вызова и возврата из подпрограммы по условию для МП.
3. Какие типы команд используются обычно памятью, называемой стеком?
PUSH и POP
Назначением команды LXI SP в табл. 1 является (установка или тестирование?) указателя стека.
Установка
Если индикатор переноса в табл. 1 установлен в 1, то по команде JC МП перейдет к выполнению команды (HLT или LXI H)?
LXI H
Команда вызова CALL в табл. 1 осуществляет помещение в стек содержимого (регистра А или счетчика команд)?
Счётчика команд
7 . Команда POP PSW извлекает из стека содержимое (аккумулятора или счетчика команд) и индикаторов и передает их в МП.
Аккумулятора
8. Знак принятия решения заменяется обычно командой (сравнить или JUMP)?
Сравнить
9. Регистры H и L (См. табл. 1) используются как регистры данных или указатели адреса в основной программе и как указатели адреса или регистры данных в подпрограмме
Выводы
В данной лабораторной работе мы изучили принцип работы подпрограмм, а также сами составили и исследовали свои программы. |
|
|