
- •Системне програмування
- •Переривання (Системні виклики). Механізм і типи переривань
- •Обслуговування переривань
- •Io.Sys і msdos.Sys
- •Маскування переривань
- •Зміна таблиці векторів переривань
- •Корекція системних обробників переривань
- •Використання переривань
- •1. Використання групи функцій переривання dos int 21h, при цьому номер функції цього переривання вказується в регістрі ah:
- •2. Посимвольний ввід шляхом звертання до драйвера bios за допомогою переривання int 16h
- •Int 16h
- •3. Звертання до клавіатури, як до файлу.
- •1. Використання групи функцій переривання dos int 21h, при цьому номер функції цього переривання вказується в регістрі ah:
- •2. Звертання до пристрою виводу(монітору), як до файлу.
- •Найбільш важливі переривання bios
- •Найбільш важливі переривання dos
- •Таблиця векторів переривань
Маскування переривань
Часто при виконанні критичних ділянок програм, для того щоб гарантувати виконання визначеної послідовності команд, необхідно забороняти переривання. Це можна зробити командою CLI (скидання прапора дозволу переривання). Її потрібно ввести в початок критичної послідовності команд, а наприкінці ввести команду STI (встановити прапор дозволу переривання). Команда CLI забороняє тільки масковані переривання, немасковані - завжди обробляються процесором.
Якщо програміст використовує заборону переривань за допомогою команди CLI, необхідно слідкувати за тим, щоб переривання не відключалися на тривалий період часу, оскільки це може призвести до небажаних наслідків, наприклад, відставання системного годинника. Якщо потрібно заборонити лише деякі переривання, наприклад, від клавіатури, для цього треба скористатися послугами контролера переривань.
Зміна таблиці векторів переривань
Якщо програмі буде потрібно організувати обробку деяких переривань, для цього необхідно перевстановити потрібний вектор переривань на свій обробник змінивши вміст відповідного елемента таблиці векторів переривань. Дуже важливо не забути перед завершенням роботи програми відновити вміст змінених векторів, оскільки після завершення роботи програми пам'ять, що була надана їй системою, вважається вільною і може бути використана для завантаження іншої програми. Якщо вектор не був відновлений і виникло переривання, робота системи може порушитися - вектор тепер вказує на область, що може містити все, що завгодно.
Послідовність дій для нерезидентных програм, що обробляють переривання, повинна бути такою:
прочитати вміст елемента таблиці векторів переривань для вектора з номером переривання, яке потрібно обробити;
зберегти цей вміст (адреса старого обробника переривання) в області даних програми;
встановити нову адресу в таблиці векторів переривань так, щоб вона вказувала на початок програми обробки переривання користувача;
перед завершенням роботи програми прочитати з області даних адресу старого обробника переривання і записати його в таблицю векторів переривань.
* для резидентних програм останній пункт виконувати не потрібно.
Операція зміни вектора переривань повинна бути неперервною в тому сенсі, що під час зміни не повинно виникнути переривання з номером, для якого відбувається заміна програми обробки. Для цього перед записом у вектор переривання потрібно заборонити переривання командою CLI, а після запису - дозволити командою STI.
Для полегшення операції заміни переривань DOS має спеціальні функції для читання елемента таблиці переривань і для запису в неї нової адреси. Коректність операцій при цьому буде гарантована. Для читання вектора використовуйте функцію 35h DOS (переривання 21h). Перед її викликом регістр AL повинен містити номер вектора в таблиці. Після виконання функції в регістрах ES:BX буде розміщена адреса обробника переривання. Функція 25h DOS встановлює для вектора з номером, що знаходиться в AL, обробник переривань DS:DX.