Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция № 9 Резидентные программы в MS DOS.ppt
Скачиваний:
9
Добавлен:
07.08.2024
Размер:
708.1 Кб
Скачать

Выгрузка резидентной программы из памяти

Любопытно, что в выгружающей программе не указывается имя выгружаемой. Выгружается та резидентная программа, которой при ее разработке была назначена функция C8h мультиплексного прерывания.

Очевидно, что методика выгрузки резидентной программы с помощью специально предназначенной для этого выгружающей программы довольно неуклюжа. Для каждой­ резидентной программы придется создавать выгружающую. Гораздо изящнее использовать в качестве выгружающей саму резидентную программу. Обычно в ней предусматривают анализ запускающей программу командной строки так, чтобы ввод с клавиатуры имени программы загружал эту программу в память, оставляя ее резидентной,­ а ввод имени программы с параметром off приводил к выгрузке программы.

Выгрузка резидентной программы из памяти

Последний шаг в выгрузке программы — освобождение памяти — можно выполнить вручную, как в примере выше, вызывая функцию DOS 49h на каждый блок памяти, который программа выделяла через функцию 48h, на блок с окружением DOS, если он не освобождался при загрузке, и наконец, на саму программу. Однако есть способ заставить DOS сделать все это (а также закрыть открытые файлы и вернуть код возврата) автоматически, вызвав функцию 4Ch, объявив резидент текущим процессом.

Выгрузка резидентной программы из памяти

Выгрузка резидентной программы из памяти

Здесь использован еще две недокументированных функции прерывания 21Н:

Функция 50h: установить сегмент для нового PSP Вход: AH = 50h

BX = адрес сегмента нового PSP Возврат: ничего

Функция 51h(81): Считать текущий сегмент PSP Вход: AH = 51h

Возврат: BX = адрес сегмента текущего PSP