Функциональная организация микро-ЭВМ и микроконтроллеров. Часть 2: К1816ВЕ48. Негода В.Н - 31 стр.

UptoLike

Команда JMPP осуществляет переход по адресу, содержащемуся в
ячейке ПП, на которую указывает содержимое аккумулятора. Таким
образом, аккумулятор содержит адрес адреса перехода. Ячейка с
адресом перехода должна находиться на той же странице памяти
программ, что и команда перехода JMPP. Команда косвенного
перехода обеспечивает простой доступ к таб лице, содержащей
векторы переходов по программе в зависимости от содержимого
аккумулятора, что позволяет легко реализовать механизм
множественных ветвлений.
Для организации циклов используется команду DJNZ. Счетчик
циклов организуется в одном из регистров текущего банка, для чего
в этот регистр загружается число повторений цикла. При
выполнении команды DJNZ производится декремент и
последующая проверка на нуль содержимого регистра - счетчика
циклов. Если его содержимое оказывается ненулевым, то
происходит переход к началу цикла, иначе - выход из цикла.
Структура программы при этом будет следующей:
MOV Rn, #N ;инициализация счетчика циклов
LOOP: ... ;тело цикла
...
...
CYCLE: DJNZ Rn, LOOP ;декремент Rn и переход,
если не нуль
Следует отметить, что команды от метки LOOP до метки CYСLE
включительно должны находиться в пределах одной страницы
памяти программ.
Для вызова подпрограмм используется команда CALL, позволяющая
обратиться в любое место текущего банка памяти программ. При
вызове подпрограммы в стеке сохраняется адрес возврата и часть
ССП. Глубина вложений подпрограмм ограничена емкостью стека
(16 байт) и не должна превышать восьми. Для возврата из
подпрограммы необходимо выполнить команду RET, которая
восстановит в счетчике команд адрес возврата. Команда RETR
служит для выхода из подпрограммы обработки прерывания, так
как кроме адреса возврата она восстанавливает PSW и разрешает
прерывания от данного источника. При программировании
прерываний МК необходимо внимательно отслеживать ситуацию
вызова подпрограммы, находящейся в альтернативном (по
отношению к текущему) банке ПП. В этом случае перед вызовом
подпрограммы необходимо выбрать соответствующий банк
памяти, а перед возвратом восстановить старое содержимое DBF.