Передача параметров в резидентную программу

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 на область межзадачных связей и взять параметры из обусловленных ячеек памяти.

 

 

Примеры

В транзитной программе: