Логический элемент
Структура дескриптора IDT
Download 384,49 Kb.
|
Answers
- Bu sahifa navigatsiya:
- 2.33. Розробка обробників зовнішніх апаратних переривань, виключень та програмних переривань
Структура дескриптора IDT:
Формирование таблицы IDT: t_idt = record off_l, {смещение обработчика прерывания – мл. часть} sel: word; {селектор обработчика прерывания} par, {параметры} acc: byte; {байт доступа} off_h: word; {смещение обработчика прерывания – ст. часть} end; idt: array [0..$30] of t_idt; {32 исключения + 16 внешних прерываний + 1 программное прерывание} idt[0].off_l := Ofs (exc_00); idt[0].sel := code_sel; idt[0].par := 0; idt[0].acc := $8F; idt[0].off_h := 0; 2.33. Розробка обробників зовнішніх апаратних переривань, виключень та програмних переривань2.33. РОЗРОБКА ОБРОБНИКІВ ЗОВНІШНІХ АПАРАТНИХ ПЕРЕРИВАНЬ, ВИКЛЮЧЕНЬ ТА ПРОГРАМНИХ ПЕРЕРИВАНЬ. 5.9. Приклад обробки пеpеpивань в захищеному режимi 5.9.1. Опис програми P_INT Як приклад обробки пеpеpивань в захищеному режимi в програмi P_INT розробленi процедури обробки виключень, зовнiшнiх апаратних пеpеpивань i програмних пеpеpивань, що працюють в захищеному режимi. При цьому програма P_INT виконує наступнi функцiї:
Розглянемо бiльш докладно роботу програми P_INT в захищеному режимi. Пiсля переведення МП в захищений режим, завантаження сегментних регiстрiв вiдповiдними селекторами GDT i виведення на екран повiдомлення "Обробка пеpеpивань в захищеному режимi" програма P_INT органiзує очiкування зовнiшнiх апаратних пеpеpивань шляхом опитування значення змiнної-семафора semaf. Початкове значення змiнної semaf дорiвнює 0, i доки значення семафора не стане рiвним 1 буде тривати цикл очiкування (i обробки) пеpеpивань. Семафор встановлюється обpобником пеpеpивання вiд клавiатури пiсля натиснення клавiшi "ESC". Обробка зовнiшнiх апаратних пеpеpивань виконується обpобниками timer, keyb, irq2_7 i irq8_15. Обpобник пеpеpивання вiд клавiатури keyb здiйснює читання скан-коду клавiшi з порту 60h, виведення значення скан-коду натиснення клавiшi на екран i встановлення семафора semaf пiсля натиснення клавiшi "ESC" (скан-код натиснення цiєї клавiшi рiвний 1). Обpобники iнших зовнiшнiх апаратних пеpеpивань є заглушками i виконують лише необхiдне для роботи системи скидання контролерiв пеpеpивань командами mov al,$20 out $20,al { Скидання 1-го контpолеpа пеpеpивань } mov al,$20 out $a0,al { Скидання 2-го контpолеpа пеpеpивань } Оскiльки в захищеному режимi не можна використовувати функцiї DOS, для виведення iнформацiї на екран розроблений обpобник програмного пеpеpивання з номером 30h. Пеpеpивання 30h має чотири функцiї: функцiя 1 встановлює маркер в задану точку екрана; функцiя 2 виводить символ на екран; функцiя 3 виводить значення байта у виглядi 2-х 16-рiчних символiв на екран; функцiя 4 виводить на екран рядок символiв. Функцiї 1 i 4 пеpеpивання 30h використовувались в програмi при виведеннi в задане мiсце екрана рядка "Обробка пеpеpивань в захищеному режимi", а функцiя 3 - при виведеннi обpобником пеpеpивання вiд клавiатури значень скан-кодiв клавіш. Обpобники виключень exc_00 - exc_18, всiх зовнiшнiх пеpеpивань, а також програмного пеpеpивання 30h використовуються, окрiм програми P_INT , також в програмi P_MULTI i тому описанi в модулi PROT. Програма P_INT здiйснює обробку всiх виключень МП за допомогою обpобникiв exc_00-exc_10, exc_0B i exc_12-exc_18. Всi обpобники виключень (окрiм обpобника виключення exc_0B) заносять в глобальну змiнну excep значення, рiвне номеру виниклого виключення, i здiйснюють повернення в реальний режим. Значення змiнної excep допомагає при налагоджуваннi визначити причину несанкціонованого завершення програми. Обpобник виключення 11 ("Вiдсутнiсть сегмента в пам'ятi") в програмi P_INT iменується exc_0B i вiдрiзняється вiд обpобника-заглушки exc_11, описаного в модулi PROT. Обpобник exc_0B iмiтує режим свопiнга (swapping): при формуваннi дескриптора сегмента даних бiт P байта доступу встановлюється рiвним 0, тобто iмiтується вiдсутнiсть даного сегмента в пам'ятi. Коли виконується команда звернення до цього сегмента, виникає виключення 11 i обpобник цього виключення по прочитаному в стекi коду помилки визначає номер дескриптора в GDT того сегмента, якого немає в пам'ятi, тобто сегмента даних, i присвоює бiту P дескриптора цього сегмента значення 1 ("Сегмент в пам'ятi"). Оскiльки пiсля обробки цього виключення управлiння передається знову до команди звернення до сегмента даних, то вiдбувається нормальне звернення до цього сегмента. Таким чином це виключення виявилося непомітним (прозорим) для команди, що зверталася до сегмента. При своппiнгi вiдсутнiй в пам'ятi сегмент завантажується з магнiтного диска в пам'ять теж непомітно для програми користувача. Програма P_INT має особливостi реалiзацiї повернення мiкpопpоцесоpа в реальний режим за командою MOV (cpu_type > 2) у порiвняннi з програмою P_MODE (див. роздiл 4). Програма P_INT при поверненнi в реальний режим виконує всi пункти, означенi в пiдроздiлi 5.6, окрiм пункту "б" (сегмент коду вже має розмiр 64 кбайти):
Download 384,49 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling