Page 113 - 4875
P. 113
$ cs: /* на стару адресу переривання */
$ call far OldVectAddr
$ push ax /* зберігання значень всіх
*/
$ push bx /* регістрів, які будуть */
$ push cx /* використовуватись
програмою */
Ξ /*текст резидентної
частини програми*/
$ pop cx /* поновлення попередніх
значень */
$ pop bx /* в регістрах (задаються в
*/
$ pop ax /* дзеркальному порядку)
*/
}
main()
{
GETINTVECT (#OldVectAddr,…); /*Замість … вказати номер
переривання апаратного
засобу */
SETINTVECT(,…,cs,#NewProg); /* Установка нового
вектору */
@ KEEP(,,,#main+1); /*Залишити програму
резидентною*/
}
Видалення (вигрузка) резидентної програми з пам’яті
В багатьох випадках виникає необхідність коректного
вивільнення пам’яті після вигризки (завершення роботи) резидентної
програми. Традиційно використовують два варіанти такої операції:
1 Ґрунтується на повторному запуску резидентної
програми зі спеціальним ключем. Після чого ініціалізуюча
112