Команда LCALL <addr16>
Команда "длинный вызов" вызывает подпрограмму, находящуюся по указанному адресу. По команде LCALL к счетчмку команд (РС) прибавляется 3 для получения адреса следующей команды и после этого полученный 16-битовый результат помещается в СТЕК (сначала следует младший байт, за ним - страший), соержимое указателя СТЕКа (SP) увеличивается на 2. Затем старший и младший байты счетчика команд загружаются соответственно вторым и третьим байтами команды LCALL. Выполнение программы продолжается командой, находящейся по полученному адресу. Подпрограмма, следовательно, может начинаться в любом месте адресного пространства памяти программ объемом до 64 Кбайт. Эта команда на флаги не влияет.
Ассемблер: |
LCALL <метка> |
Код: |
|
|
|
Время: |
2 циклa |
Алгоритм: |
(PC):=(PC)+3
(SP):=(SP)+1
((SP)):=(PC[7-0])
(SP):=(SP)+1
((SP)):=(PC[15-8])
(PC):=<adddr[15-0]> |
Пример: |
;(SP)=07H,
;метке PRN соответствует адрес 1234H,
;по адресу 0126H находится команда
;LCALL
LCALL PRN ;(SP)=09H, (PC)=1234H,
;(ОЗУ[08])=26H, (ОЗУ[09])=01H
|
|