воєї" програми або не поверне управління в викликала програму через обробник DOS (який, очевидно, завжди буде самим останнім у ланцюжку).
Природно, для комунікації з резидентної програмою повинен бути встановлений певний інтерфейс. Зазвичай при перевірці на повторну установку резидентна програма, якщо вона вже знаходиться в пам'яті, повертає в регістрі AL значення FFh, яке є ознакою заборони вторинної завантаження. Іноді для більшої надійності ідентифікації "своєї" функції резидентна програма, крім значення FFh в регістрі AL, повертає ще якісь обумовлені заздалегідь коди в інших регістрах. Часто через додаткові регістри передасться символьна інформація, наприклад, ім'я програми. У цьому випадку, якщо викликала програма з ім'ям DUMP.COM (тобто друга копія резидентної програми, що з'ясовує, чи можна їй залишитися резидентної в пам'яті) отримує після виклику int 2Fh в регістрі AL значення FFh, а в регістрах СХ і DX символьні коди 'DU' й 'МР', вона може бути впевнена, що її перша копія вже знаходиться в пам'яті. Якщо ж в регістрі AL повернувся код FFh, а в регістрах СХ і DX-коди, наприклад, 'ОК' і 'RB', це, швидше за все означає, що закріплена за нашою програмою функція мультиплексного переривання вусі використовується інший резидентної програмою. У цьому випадку варто змінити функцію, щоб не порушувати конфліктних ситуацій.
У резидентну частину слід включити обробник переривання 2Fh. Його розташування в межах тексту програми не має особливого значення; ми помістили його на початку резидентної частини. Секція ініціалізації зазнала великих змін. Вона повинна починатися з виклику переривання 2Fh з відповідною функцій для перевірки на повторну установку. Якщо перша копія програми вже завантажена, поточну програму слід завершити не функція 3th (завершити і залишити в пам'яті), а звичайною функцією завершення 4Ch. Якщо ж нашої програми в пам'яті немає, то в секції ініціалізації, крім заповнення її "Робочого" вектора, в даному випадку 03h, слід також встановити наш обробник мультиплексного переривання.
Серед функцій мультиплексного переривання, призначених для прикладних програм, ми довільно вибрали для нашої програми функцію F1h, а для перевірки на повторну установку підфункцію 00h. Резидентний обробник переривання 2Fh, включений в нашу програму, перевіряє номери функції і підфункції і при виявленні будь-яких інших кодів передає управління наступному оброблювачу цього переривання. Якщо ж викликана функція F1h з підфункції 00h, обробник встановлює в регістрі AL значення FFh ("я вже завантажений") і повертає управління в викликала програму командою iret.
Секція ініціалізації починається з перевірки на повторну установку. Після завантаження в регістр АН номера функції (F1h), а в регістр AL - номери подфункции (00h), викликається переривання 2Fh. Після повернення з переривання аналізується вміст регістра AL Якщо обробник повернув значення FFh, пр...