Команды переходовКоманды переходов используются для перемещения по тексту программы от одной строчки к другой. Для переходов используются метки.
Ни одна программа не может существовать без переходов, т.к. переходы обеспечивают непрерывность и цикличность программы (подробнее об этом в следующем разделе).
Различаются команды переходов без возврата и с возвратом.
ПЕРЕХОД НА МЕТКУ в общем виде выглядит как GOTO METKA
СПЕЦПЕРЕХОД НА МЕТКУ в общем виде выглядит как CALL METKA
ВОЗВРАТ К СПЕЦПЕРЕХОДУ в общем виде выглядит как RETLW K
ВОЗВРАТ К СПЕЦПЕРЕХОДУ в общем виде выглядит как RETURN

Спецпереход может быть вложен в другой спецпереход и т.д. не более 8 раз (задействуется т.н. 8-ми уровневый аппаратный стек); как бы то ни было, по команде RETLW K мы возвращаемся к команде, следующей за последним спецпереходом.
Команда RETLW K делает возврат, вставляя при этом в аккумулятор указанное нами число. Работать с этой парой команд (CALL и RETLW) нужно очень внимательно, т.к. можно уйти в одно место программы, а вернуться в другом. Пользу от таких телодвижений мы рассмотрим на практике, т.к. переходы – это то, без чего не может существовать ни одна программа.
Альтернативой команде RETLW K является команда RETURN. Как видно из написания в общем виде, эта команда делает простой возврат без модифицирования содержимого аккумулятора.
Существует также частный случай возврата из спецперехода по команде RETFIE , которая кроме возврата осуществляет предварительное разрешение прерываний (прерывания будут рассмотрены далее).
В командах переходов есть частный случай, именуемый как ВЫЧИСЛЯЕМЫЙ ПЕРЕХОД. Рассмотрим пример такого перехода.
ВЫЧИСЛЯЕМЫЙ ПЕРЕХОД
PCL EQU H0002 ; регистр спец назначения
; со счётчиком команд
; … любая команда
MOVF KLOP,W ; копировать в регистр W число из регистра KLOP
ADDWF PCL,F ; сложить содержимое PCL с содержимым W
; … команда 1
; … команда 2
; … команда 3
Принцип работы вычисляемого перехода.
Рассматривая метки мы затрагивали работу счетчика команд – это регистр специального назначения PCL по адресу h2. Предположим, что в нашей программе 15 строк с командами, которые выполняются друг за другом. После выполнения первой команды счетчик команд автоматически увеличивается на единицу и т.д. до 15-ой команды. В вычисляемом переходе мы можем принудительно изменить счетчик и перейти на другую строчку (как правило, счётчик увеличивают).
Например, в аккумуляторе W у нас число 0, тогда переход произойдет на строчку "команда 1"; а если у нас в аккумуляторе число 2, тогда переход произойдет на строчку "команда 3", т.е. переход на одну команду больше, чем содержимое в аккумуляторе.
|