На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / Завершение программы Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Завершение программы

Последней задачей процесса инициализации является вызов функции "завершить и оставить резидентной" (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). До тех пор, пока пользователь не вызовет другую программу, прикладной программой переднего плана будет командный процессор.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz