- •Системное программное обеспечение
- •Общие сведения о резидентных программах
- •Общие сведения о резидентных программах
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
Выгрузка резидентной программы из памяти
Любопытно, что в выгружающей программе не указывается имя выгружаемой. Выгружается та резидентная программа, которой при ее разработке была назначена функция C8h мультиплексного прерывания.
Очевидно, что методика выгрузки резидентной программы с помощью специально предназначенной для этого выгружающей программы довольно неуклюжа. Для каждой резидентной программы придется создавать выгружающую. Гораздо изящнее использовать в качестве выгружающей саму резидентную программу. Обычно в ней предусматривают анализ запускающей программу командной строки так, чтобы ввод с клавиатуры имени программы загружал эту программу в память, оставляя ее резидентной, а ввод имени программы с параметром off приводил к выгрузке программы.
Выгрузка резидентной программы из памяти
Последний шаг в выгрузке программы — освобождение памяти — можно выполнить вручную, как в примере выше, вызывая функцию DOS 49h на каждый блок памяти, который программа выделяла через функцию 48h, на блок с окружением DOS, если он не освобождался при загрузке, и наконец, на саму программу. Однако есть способ заставить DOS сделать все это (а также закрыть открытые файлы и вернуть код возврата) автоматически, вызвав функцию 4Ch, объявив резидент текущим процессом.
Выгрузка резидентной программы из памяти
Выгрузка резидентной программы из памяти
Здесь использован еще две недокументированных функции прерывания 21Н:
Функция 50h: установить сегмент для нового PSP Вход: AH = 50h
BX = адрес сегмента нового PSP Возврат: ничего
Функция 51h(81): Считать текущий сегмент PSP Вход: AH = 51h
Возврат: BX = адрес сегмента текущего PSP
