наступної резидентної програми, і якщо відновити старе вміст вектора, ця наступна програма "зависне", позбавивши засобів свого запуску. Тому на-надійно можна вивантажити тільки останню із завантажених резидентних програм.
У нашій програмі подфункция 00h переривання 2Fh служить для перевірки на повторну установку, а подфункция 01h - для вивантаження. У секцію ініціалізації додані рядки збереження старого вмісту вектора 09h. Це виконується точно так само, як і для вектора 2Fh - за допомогою функції DOS 35h. Старий вектор зберігається в комірці old_09h, що розміщується в резидентної частини програми. Оскільки вивантаження програми виконується за допомогою переривання 2Fh, текст обробника цього переривання ускладнюється.
Резидентний обробник переривання 2Fh насамперед перевіряє номер функції, що надійшов в регістрі АН, Якщо цей номер відрізняється від F1h, управління передається наступного оброблювачу по ланцюжку. Далі аналізується вміст регістру AL. Якщо AL = 00h, виконуються дії по захисту від повторного завантаження. Якщо AL = 01h, здійснюється перехід на мітку uninstall для виконання дій з вивантаження програми. При будь-якому іншому номері підфункції керування передається наступному оброблювачу по ланцюжку.
За міткою uninstall здійснюється збереження використовуваних далі регістрів (що робиться швидше для краси, ніж з потреби) і функцією DOS 25h відновлюється з осередків old_09h і old_2Fh початковий вміст відповідних векторів. Далі з осередки зі зміщенням 2Ch щодо початку PSP в регістр ES завантажується адреса оточення програми. Сегментна адреса вивільняється блоку пам'яті - єдиний параметр, необхідний для виконання функції DOS 49h. Розмір вивільняється блоку DOS відомий, він зберігається в блоці управління пам'яттю (МСВ). Далі звільняється блок пам'яті з самою програмою. Сегментна адреса цього блоку (адреса PSP) знаходиться в регістрі CS. Нарешті, командою iret управління передасться в програму, що викликала переривання 2Fh.
Функція 49h оповіщає DOS про те, що даний блок пам'яті вільний і може надалі використовуватись DOS. Це, однак, не заважає виконуватися завершальним рядках програми (в даному випадку - команді iret), оскільки звільнення пам'яті не руйнує її вмісту. Наша резидентна програма фізично зітреться лише після того, як в пам'ять буде завантажена чергова виконувана програма.
Якщо програма запускається з клавіатури із зазначенням будь-яких параметрів (імен файлів, ключів, які визначають режим роботи програми і інш.), то DOS, завантаживши програму в пам'ять, поміщає всі символи, введені після імені програми (так званий хвіст команди) в префікс програмного сегмента програми, починаючи з відносного адреси 80h. Хвіст команди міститься в PSP в цілком певному форматі. У байт за адресою 80h DOS заносять число символів у хвості команди (включаючи пробіл, що розділяє на командному рядку саму команду і її хвіст). Далі (починаючи з байта за адресою 81h) сл...