|
Поиск по сайту: |
|
По базе: |
![]() |
| Главная страница > Обзоры по типам > Микроконтроллеры > MAXQ | |||||||||
|
|
||||||||||||||||||
{L/S}CALL src - Длинный/короткий {Long/Short} вызов подпрограммыОписание: Выполняет вызов подпрограммы, расположенной по адресу, определяемому по содержимому источника scr. Команда CALL использует 8- битный src для осуществления относительного короткого вызова (IP +127/-128 слов). Команда CALL, использующая в качестве источника 16- битный src осуществляет абсолютный длинный вызов подпрограммы по 16- битному адресу. Для хранения старшего байта 16- битного непосредственного адреса команда использует регистр PFX[0]. Использование дополнительного префикса 'L' (т.е. LCALL) приведет к длинному вызову подпрограммы с использованием регистра PFX[0]. Использование дополнительного префикса 'S' (т.е. SCALL) вызовет формирование относительного короткого вызова, но будет отмечено ассемблером, если получатель за пределами диапазона. Определенный внутренний регистр src (не имеет значения - 8- битный или 16- битный) всегда осуществляет абсолютный вызов CALL по 16- битному адресу, таким образом, префиксы 'L' и 'S' не будут использоваться. Значение префиксного регистра PFX[n] используется для формирования старшего байта адреса в случае, когда в качестве scr выступает 8- битный регистр. Затрагиваемые флаги состояния: нет Выполнение команды: @++SP < IP + 1 PUSH (загрузка в стек) IP < src Absolute CALL (абсолютный вызов) IP < IP + src Relative CALL (относительный вызов) Код команды:
Пример(ы):
CALL label1 ; относительный вызов по метке label1 (адрес должн быть в пределах
; IP +127/ -128)
CALL label1 ; абсолютный вызов по метке label1 = 0120h
; MOVE PFX[0], #01h
; CALL #20h.
CALL DP[0] ; DP[0] содержит 16- битный адрес подпрограммы
CALL M0[0] ; принимается, что M0[0] - 8- битный регистр
; абсолютный вызов по адресу addr16
; старший байт addr16=00h (PFX[0])
; младший байт addr16=M0[0]
MOVE PFX[0], #22h ;
CALL M0[0] ; принимается, что M0[0] - 8- битный регистр
; Старший байт addr16=22h (PFX[0])
; младший байт addr16=M0[0]
LCALL label1 ; label=0120h и относительно команды
; абсолютный вызов инициализируется использованием префикса 'L'
; MOVE PFX[0], #01h
; CALL #20h
SCALL label1 ; относительное смещение для метки label1 рассчитывается и используется
; если label1 не относительное, то ассемблер сформирует ошибку
SCALL #10h ; относительное смещение #10h используется напрямую командой CALL
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
||||||||||||||||||