В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > MAXQ
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


{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 (относительный вызов)

Код команды:

15 0
f011 1101 ssss ssss

Пример(ы):

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