Приклад 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 Наведіть приклади способів активізації резидентних програм.