поля даних Резидентна частина Точка входу В® entry програми
при виклику . Резидентні
: коди
iret
init
. Секція
: ініціалізації Завершення програми
Функція DOS 31h В® з складанням у пам'яті
її резидентної частини
Рис. 2.2 Взаємодія елементів резидентної програми.
Функція 31h, закріпивши за резидентної програмою необхідну для її функціонування пам'ять, передає управління командному процесору і обчислювальна система переходить в початковий стан. Наявність програми, резидентної в пам'яті, ніяк не відбивається на ходу обчислювального процесу, за винятком того, що зменшується обсяг вільної пам'яті. Одночасно в пам'ять може бути завантажено будь-яке число резидентних програм. p> На рис. 2.2 показані елементи резидентної програми та їх взаємодія. p> Будь резидентна програма має принаймні дві точки входу. При запуску з клавіатури програми типу. СОМ управління завжди передається на перший байт після PSP (IP = l00h). Тому практично завжди першою командою резидентної програми є команда jmp, що передає керування на початок секції ініціалізації.
Після відпрацювання функції DOS 31h програма залишається в пам'яті в пасивному стані. Для того, щоб активізувати резидентну програму, їй треба якось передати управління і, можливо, параметри. Викликати до життя резидентну програму можна різними способами, але найбільш вживаним є механізм апаратних чи програмних переривань. У цьому випадку в секції ініціалізації необхідно заповнити відповідний вектор адресою резидентної частини програми (точка entry на рис. 2.2). Адреса entry утворює другу точку входу в програму, через яку здійснюється її активізація. Очевидно, що резидентна секція програми повинна закінчуватися командою виходу з переривання iret.
Поля даних резидентної частини програми перемістилися в початок програми після команди imp. Це досить природне місце дня резидентних даних, тому що і при першому запуску, і при активізації сюди ніколи не буде передано управління. При заповненні в секції ініціалізації векторів не виникає проблем з перенастроюванням регістра DS, так як в програмі типу СОМ всі регістри вказують на єдиний сегмент програми. У секції ініціалізації передбачений, як це зазвичай робиться, висновок на екран повідомлення про завантаження програми в пам'ять.
Після запуску програми вона залишається в пам'яті і, активізуючись фактично апаратними перериваннями від клавіатури (а більш точно - програмою BIOS, що активізується апаратними перериваннями від клавіатури).
2.2. Захист резидентної програми від повторної установки
Як правило, в секції ініціалізації завантажуються вектори переривань, через які буде активі...