Передача параметров в резидентную программу
Mov es,ax
Mov ax, 40h
Вызов резидентной программы через область межзадачных связей
End begin
Cseg ends
Int 27h ; оставляем программу резидентной
Mov dx, finish ; размер программы
Mov es,ax
Mov ax, 40h
Routine endp
Iret ;возврат из процедуры
Pop ds ; восстановление регистров
Push ds ; сохранение регистров
Routine proc far ;начало процедуры
Org 100h
Cseg segment
Int 27h
Mov dx, finish ; оставляем программу резидентной
Mov es,ax
Mov ax, 40h
mov es:0f0h, offset routine ;смещение в сегменте
mov es:0f2h, cs ;адрес сегмента
Шаблон резидентной программы в таком случае имеет вид:
assume cs:cseg, ds:cseg, ss:cseg
begin: jmp short setup
…; здесь тело процедуры
finish equ $ ; определение размера программы
Setup:
mov es:0f0h, offset routine ;смещение в сегменте
mov es:0f2h, cs ;адрес сегмента
;оставляем программу резидентной
В вызывающей программе следует ввести команды:
call dword ptr es:0f0h
Если резидентной программе требуются параметры или адреса параметров, то они записываются транзитной программой в обусловленные ячейки области межзадачных связей.
Перед записью параметров транзитная программа должна загрузить в регистр es адрес области межзадачных связей, затем записать в выбранные ячейки области межзадачных связей адрес массива параметров и содержимое регистра ds(адрес сегмента данных).
Резидентная программа должна настроить регистр es на область межзадачных связей и взять параметры из обусловленных ячеек памяти.
Примеры
В транзитной программе: