|
|
|
|
Завершение программы
Последней задачей процесса инициализации является вызов функции "завершить и оставить резидентной" (int 21h, функция 31h). При вызове функции
"завершить и оставить резидентной" необходимо сообщить DOS о том, какой объем памяти нужно сохранить. Для этого перед выдачей запроса int 21h AH=31h,
следует поместить в регистр DX необходимое количество сегментов. DOS освободит все кроме первых DX сегментов памяти, которыми владела Ваша программа.
Общепринято размещать программу инициализации в конце TSR так, чтобы она могла быть удалена после завершения своей работы. Следующий листинг
иллюстрирует использование этой служебной функции. Эта программа начинается с адреса (EndOfCode), получаемого округлением его до следующей границы
сегмента и преобразованием в параграфы путем деления на 16.
Листинг 4-26. Выполнение запроса
"завершить и оставить резидентной"
----------------------------------------------------------------
mov dx,OFFSET EndOfCode ; dx <== конец резидентной пр-мы
add dx,0fh ; округление до след. гран. сегм.
mov cl,4 ; преобразование смещения в сегм.
shr dx,cl ; dx <== резидентные параграфы
mov ah,31h ; функция TSR DOS
int 21h
----------------------------------------------------------------
|
В результате завершения запроса управление передается в DOS, а DOS возвращает управление в командный процессор (обычно файл COMMAND.COM). До
тех пор, пока пользователь не вызовет другую программу, прикладной программой переднего плана будет командный процессор.
|
|