- •Системне програмування
- •Переривання (Системні виклики). Механізм і типи переривань
- •Обслуговування переривань
- •Io.Sys і msdos.Sys
- •Маскування переривань
- •Зміна таблиці векторів переривань
- •Корекція системних обробників переривань
- •Використання переривань
- •1. Використання групи функцій переривання dos int 21h, при цьому номер функції цього переривання вказується в регістрі ah:
- •2. Посимвольний ввід шляхом звертання до драйвера bios за допомогою переривання int 16h
- •Int 16h
- •3. Звертання до клавіатури, як до файлу.
- •1. Використання групи функцій переривання dos int 21h, при цьому номер функції цього переривання вказується в регістрі ah:
- •2. Звертання до пристрою виводу(монітору), як до файлу.
- •Найбільш важливі переривання bios
- •Найбільш важливі переривання dos
- •Таблиця векторів переривань
Обслуговування переривань
У комп'ютерах IBM PC ROM знаходиться за адресою FFFF0H. При включенні комп'ютера процесор встановлює стан скидання, виконує контроль парності, встановлює в регістрі CS значення FFFFh, а в регістрі IP – нуль, тому перша команда, що буде виконуватися знаходиться за адресою FFFF:0 чи FFFF0, що є точкою входу в BIOS. BIOS перевіряє різні порти комп'ютера для визначення й ініціалізації підключених пристроїв. Потім BIOS створює на початку пам'яті (за адресою 0) таблицю переривань, що містить адреси обробників переривань, і виконує дві операції INT 11H (запит списку приєднаного обладнання) і INT 12H (запит розміру фізичної пам'яті). Наступним кроком BIOS визначає чи є на чи диску, дискеті операційна система DOS. Якщо виявлена системна дискета, то BIOS виконує переривання INT 19H для доступу до першого сектора диска, що містить блок початкового завантаження. Цей блок являє собою програму, що зчитує системні файли IO.SYS, MSDOS.SYS і COMMAND.COM з диска в пам'ять. Після цього пам'ять має наступний розподіл:
Таблиця векторів переривань
Дані BIOS
Io.Sys і msdos.Sys
Резидентная частина COMMAND.COM
Доступна пам'ять для прикладних програм
Транзитна частина COMMAND.COM
Кінець RAM (ОЗУ)
ROM BASIC
ROM BIOS
Зовнішні пристрої передають сигнал готовності через контакт INTR у процесор. Процесор реагує на цей запит, якщо прапорець переривання IF встановлений у 1 (переривання дозволене), і (у більшості випадків) ігнорує запит, якщо прапорець IF встановлений у 0 (переривання заборонене). Операнд у команді переривання, наприклад, INT 12H, містить тип переривання, що ідентифікує запит. Для того щоб зв'язати номер переривання з адресою програми реакції на переривання (обробника переривань), використовується таблиця векторів переривань, що займає перший кілобайт оперативної пам'яті - адреси від 0000:0000 до 0000:03FF. Перериванню з номером 0 відповідає адреса 0000:0000, перериванню з номером 1 - 0000:0004 і т.д. Перериванню з номером n буде відповідати адреса 0000:4*n. Таблиця складається з 256 елементів - 4-байтних адрес обробників переривань. Ці елементи називаються векторами переривань. У першому слові елемента таблиці записане зміщення, що при перериванні встановлюються в регістри IP а в другому - сегмент адреси обробника переривань, що при перериванні встановлюються в регістри CS. Ініціалізація таблиці відбувається частково програмою BIOS, частково при завантаженні DOS. DOS може переключити на себе деякі переривання BIOS. Список елементів таблиці векторів переривань приведений нижче.
Переривання заносить у стек вміст регістра прапорців FLAGS, регістра CS і регістра IP. Наприклад, для переривання 12H (яке повертає в регістрі AX розмір пам'яті) адреса елемента таблиці дорівнює 0048h ((12 х 4)h = .48h). Операція виділяє чотирибайтний елемент за адресою 0048h і заносить два байти в регістр IP і два байти в регістр CS. Адреса, що отримується у регістровій парі CS:IP, являє собою адресу початку підпрограми в області BIOS, що одержує керування. Повернення з цієї підпрограми здійснюється командою IRET (Interrupt Return), що відновлює регістр прапорців і регістри CS і IP зі стеку і передає керування на команду, що випливає за виконаною командою переривання.
