Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга. Гуржій. 1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.53 Mб
Скачать

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