Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programuv_good.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
990.21 Кб
Скачать

Процедури обслуговування переривань

Не дивлячись на те, що Турбо Паскаль має великий набір інструментальних засобів для використання можливостей MS-DOS, в багатьох випадках виникає необхідність прямого звертання до функцій MS-DOS для використання деяких специфічних засобів операційної системи , для організації обміну інформацією в оперативній пам'яті. Для більш повного використання можливостей MS-DOS в модулі DOS знаходиться дві процедури: Intr і MsDos.

В процедурі

Intr (IntNo: BYTE; VAR Regs: REGISTERS);

яка виконує задане програмне переривання, IntNo – номер програмного переривання; REGISTERS являється типом запису, визначеним в модулі DOS наступним чином:

TYPE

REGISTERS = RECORD

CASE INTEGER OF

0: (AX, BX, CX, DX, BP, SI, SI, DS, ES, Flags: WORD);

1: (AL, AH, BL, BH, CL, CH, DL, DH: BYTE);

END;

Поля запису відповідають регістрам процесора.

Процедура

MsDos (VAR Regs: REGISTERS);

виконує виклик функції DOS.

Запис REGISTERS представляє собою набір регістрів процесора, а варіант в цьому записі дозволяє працювати з першими чотирма регістрами чи послідовно, чи з їх старшими і молодшими байтами окремо. Коли виконується процедура Intr, значення полів AX, BX, CX, DX, BP, SI, SI, DS, ES завантажуються у відповідні регістри процесора. Після того як переривання обірвано, склад регістрів процесора завантажується в запис Regs, а склад регістрів прапорів копіюється в поле Flags. Таким чином, можна отримати доступ до результату роботи процедури переривань.

Для застосування процедури Intr необхідно знати деякі тонкості роботи операційної системи і добре знати семантику, параметрів і результатів викликаного переривання.

Переривання номер $21 називається перериванням DOS і об’єднує в собі велику кількість різних функцій.

Результат звернення до процедури MsDos буде той же, що і при зверненні до процедури Intr з номером переривання $21.

Для встановлення нової адреси обробника переривань використовується процедура

SetIntVec (IntNo: BYTE; Vector: POINTER);

де IntNo – номер переривання, яке необхідно перевизначити; Vector – адреса нової процедури обробки переривань. Для того щоб змінити реакцію системи на переривання і визначити обробник користувача, SetIntVec просто змінює запис в системній області Dos, яка називається областю векторів переривань, але при цьому старий вектор, тобто адреса старої процедури обробки переривань, не зберігається. Вона може бути необхідною, щоб через деякий час відновити стару реакцію на переривання чи щоб при виклику переривання спочатку спрацьовував новий обробник, який потім передавав би управління оригінальному (старому) обробнику. Цей принцип використовує більшість резидент них програм. Таким чином, працездатність системи не порушується, коли декілька програм перехвачують одне переривання. Резидентна програма спочатку відпрацьовує сама, потім передає управління іншій програмі і так далі, а в кінці управління передається операційній системі. Тому дуже важливо зберігати адресу старого обробника переривань. Для цього можна використовувати процедуру

GetIntVec (IntNo: BYTE; VAR Vector: POINTER);

яка присвоює параметру-змінній Vector адресу поточного обробника переривань, номер якого заданий в параметрі IntNo.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]