Приклад 1. Резидентна програма (активується при натисненні Alt+Left Shift)
Резидентна програма (активується при натисненні Alt+Left Shift)
INTTAB SEGMENT AT 0H ;таблиця векторів переривання
ORG 9H*4 ; адреса для int 9h
KBADDR LABEL DWORD; подвоєне слово
INITTAB ENDS
;__________________________________________________
ROMAREA SEGMENT AT 400H ; область параметрів BIOS
ORG 17H ; адреса флагів консолі
KBFLAG DB ? ; стан Alt+Left Shift
ROMAREA ENDS
;__________________________________________________
CSEG SEGMENT PARA
ASSUME CS:CSEG
ORG 100H
BEGIN: JMP INITZE
KBSAVE DD ? ;для адреси int 9h BIOS
MAIN PROC NEAR
...
CALL KBSAVE ; обробка переривань
ASSUME DS:ROMAREA
MOV AX, ROMAREA ; установити DS для доступу
MOV DS, AX ; до стану
MOV AL, KBFLAG
CMP AL, 00001010B ; Alt+LeftShift натиснуті?
JNE EXIT ; ні – вийти
...
EXIT:
IRET
MAIN ENDP
INITZE PROC
ASSUME DS:INTTAB
PUSH DS
MOV AX, INTTAB
MOV DS,AX
CLI ; заборонити переривання
; зміна адресу обробника
MOV AX, WORD PTR KBADDR
MOV WORD PTR KBSAVE, AX
MOV AX, WORD PTR KBADDR+2
MOV WORD PTR KBSAVE+2, AX
MOV WORD PTR KBADDR, OFFSET MAIN
MOV WORD PTR KBADDR+2, CS
STI ; дозволити переривання
MOV DX, OFFSET INITZE ; розмір програми
INT 27H
INITZE ENDP
CSEG ENDS
END BEGIN
Функція 31h переривання 21h є покращеною версією переривання 27h. Як додаток до завершення роботи функції 31h , вона надає можливість програмі, що завершується повідомити код повернення , який розмішується в регістрі Al та може бути перевірений в командних файлах ОС DOS. В регістр DX заноситься обсяг пам’яті, яка залишається резидентною, у параграфах (16 Б).
На жаль, в MS-DOS найважливіший обробник переривань в системі – обробник INT 21h, не є повторно вхідним. На відміну від переривань BIOS, обробники яких використовують стек перерваної програми, обробник системних функцій DOS записує в SS:SP адресу дна одного з трьох внутрішніх стеків DOS. Якщо функція була перервана апаратним перериванням, обробник якого викликав іншу функцію DOS, вона буде користуватись тим же стеком, затираючи все, що туди помістила перервана функція. Коли керування повернеться до перерваної функції, у стеці буде сміття і виникне помилка.
Функції BIOS також часто виявляються не повторно вхідними. Зокрема, цим відрізняються обробники переривань 5, 8, 9, 0Bh, 0Ch, 0Dh, 0Eh, 10h, 13h, 14h, 16h, 17h.
3.2 Домашнє завдання
Використовуючи конспект лекцій, рекомендовану літературу, вивчити функції припинення процесу. Ознайомитися із змістом та порядком виконання роботи.
3.3 Хід виконання роботи
Написати та відлагодити програму на Асемблері, що реалізує різні способи виходу із неї.
3.4 Зміст звіту
3.4.1 Сформульована мета роботи.
3.4.2 Алгоритм та текст програми згідно п.3.1.
3.5 Контрольні питання
3.5.1 Назвіть основні способи завершення програм.
3.5.2 Дайте порівняльну характеристику функціям завершення процесу.
3.5.3 Поняття резидентності.
3.5.4 Назвіть основні частини резидентної програми, їх призначення.
3.5.5 Наведіть приклади способів активізації резидентних програм.