Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
724.99 Кб
Скачать

5. Реализация заданных временных интервалов программным способом

5.1. Краткие сведения из теории

В том случае, если при работе МП необходимо неоднократное выполнение одного и того же набора команд, его оформляют в виде подпрограммы. Тогда для вызова подпрограммы используют команду CALL ADR, где ADR, - адрес первой команды подпрограммы.

Остановимся на принципе работы МП при работе с подпрограммами.

Пусть главная программа начинается с адреса 0800Н, а подпрограмма – с адреса ADR (в данном случае ADR – общее обозначение адреса ячейки памяти, в конкретном случае он имеет свое шестнадцатеричное представление). Главная программа имеет в своем составе необходимое количество команд вызова подпрограммы. Описанная программа представлена на рис. 5.1, где команды, не интересующие нас в данном случае, отмечены пунктиром.

Г лавная программа

Адрес

Мнемоника

Адрес

Мнемоника

Подпрограмма

0800

ADR

CALL ADR

CALL ADR

RET

Рис. 5.1. Программа, имеющая в своем составе подпрограмму

После запуска МП с адреса 0800Н он через некоторое время дойдет до адреса с кодом команды CALL ADR. При выполнении команды CALL ADR МП загружает в стек адрес следующей команды (за CALL), а адрес ADR загружает в счетчик команд (РС), поэтому следующей выполняемой МП командой будет команда по адресу ADR (первая команда подпрограммы). Последней командой подпрограммы всегда должна быть команда RET, обеспечивающая возврат в главную программу. При ее выполнении в РС загружается адрес из стека (который был записан при выполнении команды CALL), поэтому следующей выполняемой командой будет команда, следующая за CALL. Осуществляемые переходы из главной программы в подпрограмму и обратно показаны на рисунке стрелками.

Следует отметить, что поскольку при выполнении команд CALL и RET МП использует стек, то в программе необходимо определить область стека, т.е. в указатель стека (SP) загрузить адрес вершины стека. Это обычно делают в самом начале главной программы, используя, например, команду LXI SP ADR. Здесь ADR – условное обозначение адреса вершины стека, который для УМК-80 можно назначить как 0BFFH (адрес последней ячейки памяти ОЗУ).