
- •Передмова
- •Intel 430lx
- •Intel 430nx
- •Intel 430fx
- •Intel 430hx
- •Intel 430vx
- •Intel 430tx
- •Intel 450gx/kx
- •Intel 440fx
- •Intel 440lx agPset
- •Intel 440ex
- •Intel 440bx agPset
- •Заняття 1. Поняття про систему переривання пеом
- •Принципи організації системи переривання програм
- •Слово стану процесора (програми)
- •Характеристики системи переривання
- •Організація переходу до перериваючої програми та пріоритетне обслуговування запитів переривання
- •Процедура переривання з опитуванням джерел (прапорців) переривання
- •Програмно-керований пріоритет перериваючих програм
- •Методи використання механізму переривань
- •Класи переривань пеом
- •Призначення контролера апаратних переривань пеом
- •Опис основних елементів і8259а
- •Стани програмованого контролера переривань
- •Заняття 5. Керування режимами роботи пкп
- •Void main (void){
- •Int mask;
- •Заняття 6. Керування пріоритетами переривань
- •Install proc near
- •Заняття 8. Особливості практичного використання апаратних та програмних переривань
- •Volatile long ticks;
- •Void main(void) {
- •Void _interrupt _far timer(void) {
- •Int8 proc near cli
- •Int09 proc near
- •Розділ 3. Підсистема таймера та годинника реального часу
- •Заняття 3. Системні засоби програмного доступу до ресурсів таймера
- •Void tm_delay(int ticks) {
- •Void main (void){
- •Void main(void){
- •Заняття 4. Приклади використання функціональних можливостей таймера в прикладних задачах
- •Void main(void){ int Frac; char k;
- •Void tm_sound(int freq, int time) {
- •Void tm_delay(int ticks) {
- •Void tm_sound(int freq, int time){
- •Void main(){
- •Void main() { int I,j; clrscr();
- •Заняття 5. Архітектура та принципи функціонування годинника реального часу
Int8 proc near cli
pushf push ax push dx cmp cs:Busy,True ;перевірити прапорець
;фільтра переривання 13h
jz SoundEnable
; Вимкнути динамік
mov dx, 61h
in al, dx
and al, 11111100b
out dx, al
jmp ExitlntS
SoundEnable:
; Увімкнути динамік
mov dx, 61h
in al, dx
or al, 00000011b
out dx, al
Exitlnt8:
pop dx
pop ax
popf
sti
jmp dword ptr cs:01d8
endp
Busy db False _ax dw ?
Filterlntl3 proc near
;Встановлюємо прапорець "ЗАЙНЯТО"
mov byte ptr cs:Busy, True
;Викликаємо штатний оброблювач переривання INT13h
pushf call
dword ptr cs:Oldl3
;3абезпечуємо передачу регістрів прапорців у стек
cli
mov cs:_ax, ax
add sp, 4
pop ax
pushf
sub sp, 4
mov ax, cs:_ax
sti
;Скидання прапорця «ЗАЙНЯТО»
mov cs:Busy,False
iret
endp
; ... Old vectors
OLD8 dd ?
Oldl3 dd ?
;====[ПРОГРАМА ВСТАНОВЛЕННЯ РЕЗИДЕНТА]===
mov Word Ptr cs:Old8+2, ax
mov ax, ds:[13h*4]
mov Word Ptr cs:Oldl3, ax
mov ax, ds:[13h*4+2]
mov Word Ptr cs:Oldl3+2,ax
MAIN PROC NEAR
cli
;=[Встановлюємо базову адресу таблиці векторів переривання]=
push ds
mov ax, 0
mov ds, ax
mov si, 8h*4
mov di, offset Old8
;=[3берігаємо «старі» вектори переривань 08h та 13h у змінних]=
mov ax, ds:[8h*4]
mov Word Ptr cs:Old8, ax
mov ax, ds:[8h*4+2]
mov Word Ptr cs:Old8+2, ax
mov ax, ds:[13h*4]
mov Word Ptr cs:Oldl3, ax
mov ax, ds:[13h*4+2]
mov Word Ptr cs:Oldl3+2,ax
;=[У таблицю записуємо нові адреси оброблювачів переривань]= mov ax, offset INT8
mov ds:[8h*4], ax
mov ds:[8h*4+2],cs
mov ax, offset Filterlntl3
mov ds:[13h*4], ax
mov ds:[13h*4+2],cs pop ds sti
;Програмуємо канал 2 таймера для виводу звуку в момент ;читання диска
mov dx, 61h
in al, dx
and al, 11111100b
out dx, al
mov dx, 43h
mov al, 10110110b
out dx, al
dec dx
mov ax, 2ffh
out dx, al
mov al, ah
out dx, al
;====[Резидентне завершення програми TSR ]=======
mov dx, offset main int 27h
ENDP
CSEG ENDS END BEGIN
Практикум
Лабораторна робота 4
Тема роботи
Дослідження методів розробки резидентних програм з фільтрацією оброблювачів апаратних переривань.
Мета роботи
Засвоїти основні особливості логічної побудови простої типової резидентної програми.
Навчитись розробляти програмні модулі, що аналізують стан оброблювача переривання 13h (активний — неактивний).
Усвідомити основні особливості процедур збереження та відновлення штатних векторів переривання.
Вимоги
Для виконання роботи потрібні знання та навички програмування мовами СІ та Ассемблера, ґрунтовні знання архітектури та принципів функціонування програмованого контролера переривань, а також знання та навички програмного доступу до регістрів ПКП.
На вінчестері комп'ютера має бути встановлене середовище програмування Borland C++ V3.01 в каталозі ВС.
Вправа 1
1. Дослідіть програму Filtr_13. asm, яка є резидент-ною, що перехоплює переривання від таймера та INT13h BIOS.
2. За текстом програми нарисуйте схему алгоритму.
3. На вінчестері створіть каталог РКР.
4. За допомогою редактора середовища програмування Borland C++ V3.01 створіть символьний файл тексту вивченої Вами програми та запишіть його в каталог РКР.
5. Виконайте настройку програми та запустіть її на виконання (у командному рядку наберіть tasm Filtr_13. asm; після трансляції — tlink Filtr_13. obj /t).
6. Зробіть висновки про Ваші досліди по дослідженню резидентних програм з фільтром функцій переривання INT13h.
Питання для самоконтролю знань
1. Назвіть кілька причин, які є основою для написання власного оброблювача переривання.
2. Яким чином можна переназначити вектор на свій оброблювач переривання?
3. Вкажіть послідовність дій, яку повинна виконати нерезидентна програма, «що бажає» обробляти переривання.
4. Яку функцію переривання 21h необхідно використовувати для читання вектора з таблиці?
5. Яку функцію переривання 21h необхідно використовувати для запису вектора в таблицю векторів переривання?
6. Назвіть особливості обробки апаратних переривань.
7. В яких випадках використовують свопінг у резидентних програмах?
8. Назвіть правила побудови фільтрів оброблювачів переривань.
Резюме
Причиною написання власних оброблювачів переривання є потреба в часто використовуваних процедурах багатьма прикладними програмами; відстеження деяких подій при розв'язанні задач у реальному часі; необхідність модифікації стандартних оброблювачів переривань і т. п.
Для організації більшості оброблювачів переривань Ваша програма повинна переназначити стандартний вектор на свій оброблювач. Це можна зробити, змінивши вміст відповідного елемента таблиці векторів переривань.
Тому послідовність дій для нерезидентних програм, що бажають обробляти переривання, повинна бути такою:
прочитати вміст елемента таблиці векторів переривань для вектора з потрібним Вам номером;
запам'ятати цей вміст (адреса старого оброблювача переривання) в області даних програми;
встановити нову адресу в таблиці векторів переривань так, щоб вона відповідала початку Вашої програми обробки переривання;
перед завершенням роботи програми прочитати з області даних адресу старого оброблювача переривання та записати її в таблицю векторів переривань.
Для полегшення роботи по заміні переривання DOS надає у Ваше розпорядження спеціальні функції для читання елемента таблиці векторів переривання та для запису в неї нової адреси. Якщо Ви будете використовувати ці функції, DOS гарантує, що операція по заміні вектора буде виконана правильно. Вам не потрібно турбуватись про безперервність процесу заміни вектора переривання.
Для читання вектора застосовуйте функцію 35h переривання 21h. Перед її викликом регістр AL повинен містити номер вектора в таблиці. Після виконання функції в регістрах ES:BX буде шукана адреса оброблювача переривання.
Функція 25h переривання 21h встановлює для вектора з номером, що знаходиться в AL, оброблювач переривання DS:DX.
Зрозуміло, Ви можете безпосередньо звертатись до таблиці векторів переривань, але тоді, записуючи, необхідно замаскувати переривання командою CLI, не забувши дозволити їх після запису командою STI.
Щодо апаратних маскованих переривань слід зазначити: якщо Ви повністю замінюєте стандартний оброблювач апаратного переривання, не забудьте в кінці програми видати байт 20h (команда скидання ЕОІ) в порт з адресою 20h (AOh для другого контролера І8259А). Ці дії необхідні для очищення регістра обслуговування переривання ISR.
Ваш наступний крок
Ви отримали базові знання про найважливішу підсистему більшості обчислювальних машин, яка визначає асинхронний принцип організації виконання потоку програм. Від знання принципів організації та функціонування системи переривання ПЕОМ залежить ефективність використання обчислювальної продуктивності Вашого комп'ютера прикладними програмами.
Тепер можна перейти до закріплення пройденого матеріалу. Виконайте всі запропоновані вправи. Спробуйте застосувати свої знання про системи переривання на практиці при розв'язанні прикладних задач. Уважно вивчіть проблеми, які можуть виникнути при практичному
використанні функціональних можливостей апаратних засобів системи переривань ПЕОМ та спробуйте запропонувати спосіб їх розв'язання. Буде краще, якщо Ви запропонуєте кілька альтернативних варіантів і дасте вичерпну характеристику кожному з них.
Закріплення матеріалу
Основні положення
У розділі 2, «Система переривання ПЕОМ», Ви вивчили загальні принципи організації систем переривань ЕОМ, структуру та функціонування системи переривань ПЕОМ типу IBM PC AT, способи програмного керування режимами ПКП.
Основними функціями системи переривання є:
запам'ятовування стану програми, що переривається, та здійснення переходу до перериваючої програми;
відновлення стану перерваної програми та повернення до неї.
При наявності кількох джерел запитів переривання система переривання повинна встановити певний порядок (дисципліну) в обслуговуванні запитів, що надходять.
Ефективність систем переривання характеризується:
загальним числом запитів переривання;
часом перемикання програм;
глибиною переривання;
числом класів (рівнів) переривання.
У зв'язку з тим, що відносний ступінь важливості програм, їх частота повторення, відносний ступінь терміновості в ході обчислювального процесу можуть змінюватись, пріоритет між перериваючими програмами також необхідно змінювати, вимагаючи встановлення нових пріоритетних відношень, що забезпечується перепрограмуванням системи переривання.
На практиці програмні переривання використовуються для організації доступу до стандартних оброблювачів DOS та BIOS. Крім того, прикладні програми можуть встановлювати свої оброблювачі переривань для їх наступного використання іншими програмами.
Складання власних програм обробки переривань та заміна стандартних оброблювачів DOS та BIOS є відповідальною та складною роботою. Необхідно враховувати всі тонкощі роботи апаратури та взаємодії програмного та апаратного забезпечення. При налагоджуванні можливе руйнування ОС з непередбачуваними наслідками.
У системах, побудованих на базі МП сім'ї і80х86, переривання можуть генеруватись мікропроцесором (внутрішні апаратні), апаратурою ПЕОМ (зовнішні апаратні), а також програмами (програмні).
Ідентифікатором перериваючої події є номер вектора переривання. Для зв'язку початкової адреси програми оброблювача переривань з номером переривання використовується таблиця векторів переривань, що займає перший кілобайт основної пам'яті (ОП) (логічні адреси [DS : SI] 0000:0000-0000:03FF). Таблиця складається з 256 елементів FAR — адрес оброблювачів переривань, кожний з яких займає в таблиці чотири байти.
Апаратним забезпеченням системи переривання є контролер переривання, який являє собою дві каскадно ввімкнені мікросхеми І8259А.
Основні функції, що реалізуються мікросхемою І8259А.
1. Фіксація запитів на переривання від 8 зовнішніх джерел.
2. Оцінка пріоритету запиту, що надійшов, та формування черги на обслуговування згідно з встановленою дисципліною.
3. Програмне маскування запитів, що надходять.
4. Присвоєння циклічних або програмно змінюваних пріоритетів входам контролера, на які надходять запити.
5. Визначення та передача процесору номера апаратного переривання.
6. Ініціювання виклику процедури обробки апаратного переривання, що надійшло.
Система переривання ПЕОМ є багаторежимною та програмно керованою. Режими обслуговування джерел переривань:
1) режим фіксованих пріоритетів;
2) автоматичний зсув пріоритетів;
3) програмно керований зсув пріоритетів;
4) автоматичне завершення обробки переривання (Automatic End of Interrapt, AEOI);
5) режим спеціальної маски;
6) режим опитування.
ПКП може знаходитись у двох станах: настройки або обслуговування запитів на переривання. У стані настройки здійснюється ініціалізація та встановлення режимів роботи контролера шляхом його програмування як пристрою вводу/виводу за допомогою чотирьох керуючих слів ініціалізації ICW1—ICW4, а в стані обслуговування контролер приймає операційні керуючі слова 0CW1— 0CW3, що визначають алгоритм обслуговування запитів на переривання в заданому режимі ініціалізації.
Для ініціалізації та керування режимами роботи ПКП в обчислювальній системі виділені порти вводу/виводу 20h та 21h для ведучого та AOh, Alh — веденого відповідно.
При ініціалізації ПКП виконуються такі дії, у тому числі й апаратні:
згідно ICW1 встановлюється логіка послідовності ініціалізації таким чином, щоб забезпечувався прийом ICW, вказаних в ICW1;
скидаються регістри ISR та IMR;
скидається режим спеціального маскування (SMM);
скидається тригер ротації в автоматичному режимі ЕОІ;
схема читання/запису настроюється на читання IRR в обох контролерах;
встановлюється фіксований пріоритет (вищий у IRQ0, нижчий у IRQ7);
встановлюється режим розпізнавання запитів на переривання по фронту;
встановлюється робота підсистеми в каскадному режимі (об'єднання по входу IRQ2 MASTER);
присвоюються коди векторів, що відповідають рівням переривань.
Для зміни дисциплін обслуговування переривань у І8259А є багато команд та режимів. Усі вони програмуються, тобто можуть бути змінені динамічно. Ці режими та команди забезпечують для користувача широкі можливості в частині прикладних програм, керованих за перериваннями. Практика показує, що при написанні оброблювачів переривання необхідно додержуватись певних правил та прийомів організації програм. Практично в будь-якому оброблювачі можна виділити такі основні розділи: ініціалізація оброблювача, активізація оброблювача, обробка переривання та вихід з оброблювача. Дотримання відповідних вимог у кожній з фаз гарантує коректну роботу всієї обчислювальної системи.
Перевірочна робота
Виконуючи кожну вправу, точно дотримуйтесь наших інструкцій. (Відповіді наведені після заключної вправи).
Вправа 1. Закінчіть фразу
Зіставте початок фрази з лівої колонки з найбільш відповідним її кінцем з колонки справа. Вибравши варіант, закінчіть фразу. Кожний пункт правої колонки можна використовувати тільки один раз.
1. Програмні переривання зручно використовувати для
2. Сигнали запитів апаратних переривань
3. Апаратні внутрішні переривання процесора призначені для
4. Вектор переривання містить
5. Основними функці ями системи переривання є
6. Програмні переривання використовуються для
7. Таблиця векторІЕ переривань, що займає перший кілобайт основної пам'яті (ОП) використовується для
8. Для оцінки ефективності систем переривання використовують характеристики:
9. Найпростіший спосіб встановлення пріоритетних відношень між запитами (рівнями) переривання
10. Зовнішні апаратні переривання
а) формуються контролерами зовнішніх пристроїв;
б) запам'ятовуванння стану програми, що переривається, та перехід до перериваючої програми;
в) відновлення стану перерваної програми та повернення до неї;
г) загальне число запитів переривання, глибина переривання, число класів (рівнів) переривання;
д) затрати часу на перемикання програм;
ж) усю необхідну інформацію для переходу до перериваючої програми, в тому числі її початкову адресу;
з) полягає в тому, що пріоритет визначається порядком приєднання ліній сигналів запитів до входів системи переривання;
і) організації доступу до окремих, загальних для всіх програмних модулів; к) обробки помилок, що з'являються в процесі виконання власне команд процесора та перешкоджають виконанню як поточної, так і наступної команди;
л) сигналізують мікропроцесору про події, що відбулися в апаратурі комп'ютера;
м) приведення в дію вмонтованих програм rom bios, dos, а також модулів прикладних програм;
н) зв'язки початкової адреси програми оброблювача переривань з номером переривання.
Вправа 2. Оберіть правильну відповідь
1. Вкажіть розподілення входів IRQ0-IRQ15 ПКП між пристроями ПЕОМ.
IRQ0 а) генерується контролером гнучкого диска після
завершення операції читання/запису;
IRQ1 б) переривання від контролера твердого диска для
машин XT. У машинах IBM PC/AT зарезервовано;
IRQ2 в) переривання принтера. Генерується принтером,
коли він готовий до виконання чергової операції.
Багато адаптерів принтерів не використовують це
переривання;
IRQ3 г) переривання від годинника реального часу;
RQ4 д) зарезервовано;
IRQ5 є) переривання від клавіатури. Генерується при натисканні та відтисканні клавіші. Використовується для читання даних з клавіатури;
IRQ6 ж) переривання інтервального таймера, виникає 18,2 рази за секунду;
IRQ7 з) використовується для каскадування контролерів апаратних переривань у машинах IBM PC/AT;
IRQ8 і) переривання асинхронного порту COM2;
IRQ9 к) зарезервовано;
IRQ10 л) переривання асинхронного порту СОМІ;
IRQ11 м) переривання від математичного співпроцесора;
IRQ12 н) переривання від контролера EGA;
IRQ13 о) зарезервовано;
IRQ14 п) зарезервовано;
IRQ15 р) переривання від контролера НТМД.
2. Основні функції, що реалізуються контролером І8259А. (Вкажіть неправильні відповіді).
A) Утворення каналу передачі даних від зовнішніх пристроїв у пам'ять та навпаки.
B) Фіксація запитів на переривання від 8 зовнішніх джерел.
C) Оцінка пріоритету запиту, що надійшов, та формування черги на обслуговування згідно зі встановленою дисципліною.
D) Формування часових інтервалів.
E) Програмне маскування запитів, що надходять.
F) Ініціювання захоплення системної шини ПЕОМ.
G) Присвоєння циклічних або програмно змінюваних пріоритетів входам контролера, на які надходять запити.
Н) Організація регенерації динамічного ОЗП.
І) Визначення та передача процесору номера апаратного переривання.
J) Ініціювання виклику процедури обробки апаратного переривання, що надійшло.
К) Формування сигналів-команд керування циклами системної шини.
3. Правильно вкажіть призначення основних вхідних та вихідних сигналів контролера переривання ПЕОМ.
1. АО (Address 0)
2. CASO - CAS2 (Cascade)
3. DO - D7 (bidirectional Data bus)
4. INT (INTerrupt)
5. INTA* (INTerrupt Acknowlege)
6. IR0-IR7 (Interrupt Request)
7. RD* (ReaD)
8. WR* (WRite)
9. CS* (Chip Select)
а) використовується для запису слів ініціалізації та команд у регістрі керування;
б) використовується для видавання на D0-D7 вмісту регістрів IMR, ISR та IRR або рівня пріоритету;
в) служать для взаємодії з МП по шині даних;
г) вхід підтвердження переривання від контролера шини;
д) сигнал запиту переривання від системи маскованих джерел переривання;
є) входи для запитів переривання від пристроїв вводу/виводу або ведених контролерів;
ж) при каскадуванні контролерів служать для ідентифікації веденого контролера;
з) служить для вказання порту І8259А, до якого здійснюється звертання при запису або читанні.
і) ідентифікує звертання до контролера.
4. Які функціональні вузли входять до складу І8259А? Оберіть чотири найточніші, на Ваш погляд, відповіді.
1. Дешифратор коду команд.
2. Регістр запитів переривання.
3. Адресні регістри.
4. Регістр маски.
5. Регістр обслуговуваних запитів.
6. Схема співпадання.
7. Арбітр пріоритетів.
8. Лічильник циклів.
Вправа 3. Підтвердіть або спростуйте твердження
1. ПКП може знаходитись у стані настройки або обслуговування. (Так. Ні.) j
2. Для програмування ПКП зарезервовані адреси AOh, Alh для веденого (MASTER) та 20h, 21h для ведучого (SLAVE). (Так. Ні.)
3. Слова ініціалізації І8259 призначені для циклічного зсуву пріоритетів. (Так. Ні.)
4. Слово ініціалізації ICW1 задає умови ініціалізації ПКП. (Так. Ні.)
5. Слово ініціалізації ICW2 задає номер вектора переривання для переривань рівня 0. (Так. Ні.)
6. Слова ініціалізації ICW3 однакові для ведучого та веденого контролерів. (Так. Ні.)
7. Слово ініціалізації ICW4 задає режим завершення обробки переривання. (Так. Ні.)
8. Ввід слів ініціалізації ПКП можна здійснити в довільній послідовності. (Так. Ні.)
9. У заданому режимі роботи ПКП користувач не має можливості змінювати режими обслуговування переривань. (Так. Ні.)
10. Робочі «накази» 0CW1-0CW3 призначені для зміни режимів обслуговування переривань. (Так. Ні.)
11. Якщо в обчислювальній системі два контролери переривань, то спочатку ініціалізується SLAVE (ведений), далі MASTER (ведучий). (Так. Ні.)
12. При написанні програмних модулів ініціалізації ПКП необхідно передбачити програмні затримки після команд передачі слів ініціалізації та робочих «наказів». (Так. Ні.)
13. У першому циклі підтвердження переривання забороняються входи запитів переривання IRQ. (Так. Ні.)
Вправа 4. Виконайте завдання, давши коротку відповідь
1. Яку структуру переривань підтримує режим фіксованих пріоритетів?
2. Яка послідовність обробки запитів на переривання в режимі фіксованих пріоритетів?
3. За допомогою якої команди здійснюється скидання тригерів регістра ISR?
4. Які способи завершення переривання (ЕОІ) Ви знаєте?
5. В яких випадках доцільно застосовувати звичайну команду ЕОІ?
6. В яких випадках доцільно застосовувати спеціальну команду ЕОІ?
7. В яких випадках доцільно застосовувати команду автоматичного завершення переривання АЕОІ?
8. З якою метою використовується режим маскування переривань?
9. Чим маскування переривань відрізняється від заборони переривань встановленням прапорця IF процесора?
10. В яких випадках доцільно застосовувати спеціальний режим маскування (SMM)?
11. З якою метою використовується режим читання стану контролера І8259А ?
Відповіді
Вправа 1. Закінчіть фразу
1 - І; 2 - А; 3 - К; 4 - Ж; 5 - Б, В; 6 - М; 7 - Н; 8 - Г, Д; 9 - 3; 10 - Л.
Вправа 2. Оберіть правильну відповідь
1. IRQ0 - Ж; IRQ1 - Е; IRQ2 - 3; IRQ3 - І; IRQ4 - Л; IRQ5 - Б; IRQ6 - A; IRQ7 - В; IRQ8 - Г; IRQ9 - Н; IRQ10 - Д; IRQ11 - О; IRQ12 - К; IRQ13 - М; IRQ14 - Р; IRQ15 - П.
2. A; D; F; Н; К.
3. 1 - 3; 2 - Ж; 3 - В; 4 - Д; 5 - Г; б - Е; 7 - Б; 8 - А; 9-І.
4. 2; 4; 5; 7.
Вправа 3. Підтвердіть або спростуйте твердження
1 - Так; 2 - Ні; 3 - Ні; 4 - Так; 5 - Так; 6 - Ні; 7 - Так; 8 - Ні; 9 - Ні; 10 - Так; 11 - Ні; 12 - Так; 13 - Так.
Вправа 4. Виконайте завдання, давши коротку відповідь
1. Входу IRQ0 присвоюється вищий пріоритет, а входу IRQ 7 — нижчий.
2. Спочатку обробляються запити з вищим пріоритетом, далі — з нижчим.
3. Скидання тригерів регістра ISR здійснюється командою ЕОІ.
4. За допомогою звичайної команди ЕОІ, спеціальної ЕОІ та автоматичного скидання.
5. Звичайну команду ЕОІ слід застосовувати тільки тоді, коли останній підтверджений та обслужений запит на переривання буде мати вищий пріоритет.
6. Спеціальна команда ЕОІ потрібна для того, щоб скидати в ISR розряд виконаної програми оброблювача переривань, коли І8259А не взмозі автоматично його визначити.
7. Очевидна перевага автоматичного режиму ЕОІ полягає в непотрібності спеціальних команд.
8. Коли користувачу необхідно відмінити те або інше апаратне переривання з можливістю запуску його після зняття заборони.
9. При встановленні прапорця IF процесора забороняються всі апаратні переривання, а за допомогою маскування в контролері можна заборонити вибірково.
10. Режим спеціального маскування дозволяє переривання всіх рівнів, крім рівня поточного обслуговування.
11. Вміст кожного 8-розрядного регістра контролера IRR, ISR та IMR може бути прочитаний для коректування програми користувача за поточним станом І8259А.
Прикладні задачі
У системному програмуванні досить часто виникають ситуації, коли необхідно добавити деякі функції до існуючого переривання. В якості прикладу розгянемо задачу перетворення одного натискання клавіші клавіатури на довгі визначені користувачем символьні рядки (макровизначення клавіатури).
Початкові умови
Увесь ввід з клавіатури здійснюється через функції переривання INT09h BIOS. Всі переривання вводу з клавіатури DOS викликають переривання BIOS для отримання символу з буфера клавіатури.
Задача
Необхідно модифікувати переривання INT09h таким чином, щоб воно служило «шлагбаумом» для макровиз-начень, після чого будь-яка програма повинна отримати макровизначення незалежно від того, яке переривання вводу з клавіатури вона використовує.
Ваше розв'язання
Наведений перелік питань допоможе Вам виділити проблему та визначити шляхи її розв'язання.
1. Які номери векторів переривання можна використовувати для виклику своїх оброблювачів переривання?
2. Якого типу повинна бути програма-модифікатор оброблювача переривання INT09h?____________________
3. В якій послідовності повинні викликатись стандартний оброблювач переривання та модифікатор?________
Можливі розв'язки
Звичайно, модифікувати переривання BIOS та DOS непросто, оскільки BIOS розміщена в ПЗП, a DOS не забезпечується лістингами програм та обмежена розмірами відведеної для неї оперативної пам'яті. Але користувач може написати процедуру, яка передує та/або слідує за відповідним перериванням, і ця процедура може викликатись при виклику відповідного переривання BIOS або DOS. Наприклад, для вищерозгляненого випадку переривання INT09h Вам потрібно написати процедуру та вказати на неї вектором переривання з номером 09h. Оригінальне значення вектора переривання 09h тим часом переноситься в який-небудь невикористовуваний вектор. Нова процедура просто викликає «приховане» переривання, щоб повернутись до оригінального переривання 09h; тому коли поточна програма викликає переривання 09h, керування передається спочатку Вашій процедурі; далі вона повинна викликати оригінальне переривання 09h, яке по завершенні знову повинне повернути керування Вашій процедурі, а з неї Ви повернетесь у те місце програми, звідки надійшов виклик переривання 09h. Після того, як це зроблено, у новій процедурі може міститись будь-який код як до, так і після виклику «прихованого» переривання. Для реалізації вказаних дій необхідно:
створити нову процедуру, що викликає «приховане» переривання;
переписати (сховати) оригінальний вектор переривання 09h, наприклад під номером 60h;
змінити вектор 09h, щоб він вказував на нову проце-
дуру;
завершити програму, залишаючи її резидентною. У графічному вигляді це буде зображено так (див. рис. 2.17).
Розглянена схема дій не є єдиною. Можна запропонувати ще кілька розв'язків вказаної проблеми. Наприклад, у резидентну частину програми виділити змінну, в якій зберегти старий вектор та повернути його в потрібний момент часу, використовувати перехоплення переривання INT16h тощо.
Для реалізації поставленої задачі можна використовувати резидентну програму, наведену в занятті 7 даного розділу. У цій програмі необхідно замінити виконуючу процедуру резидента "РЕЗИДЕНТНА ПРОЦЕДУРА ОБРОБКИ НАТИСКАННЯ КЛАВІШ" на процедуру "РЕЗИДЕНТНА ПРОЦЕДУРА МАКРОПІДСТАНОВОК КЛАВІАТУРИ", а також змінити процедуру SetVectorlnterrupt: (Встановлення 09-го вектора) (див. нижче). Логіка роботи процедур пояснюється коментарями.
; РЕЗИДЕНТНА ПРОЦЕДУРА МАКРОПІДСТАНОВОК КЛАВІАТУРИ ;
;макропідстановки операторів мов СІ ALT+U; ALT+W;
;ALT+D
AltU db "unsigned',0
AltW db while',0
AltD db double',0