Система прерываний в защищенном режиме процессора Intel
Базовая система прерываний (реальный режим) 256 векторов прерываний 00000h 00004h 00008h 0000Ch 000FCh селектор int FFh int 00h int 01h int 02h int 03h сегмент
Обработка вызова прерывания (реальный режим) int N N*4 = X … Таблица векторов прерываний Вектор N offsetsegment Системная область памяти Обработчик iret … pushf push cs push ip pop ip pop cs popf
Interrupt Description Table (IDT) База IDTЛимит IDT IDTR Системный дескриптор сегмента … -Шлюз прерывания (6 или E) -Шлюз ловушки (7 или F) -Шлюз задачи (5) 8 байт база доступ…база лимит база
Байт доступа – системный сегмент 1 – не системный сегмент тип дескриптора 5 – шлюз задачи 6 – 16-битный шлюз прерывания 7 – 16-битный шлюз ловушки E – 32-битный шлюз прерывания F – 32-битный шлюз ловушки
Описание таблицы IDT ; таблица дескрипторов прерываний IDT IDT label byte ; все эти дескрипторы имеют тип 0Eh - 32-битный шлюз прерывания ; INT dw 8 dup(so int_handler,SEL_32bitCS,8E00h,0) ; INT 08 (irq0) dw so irq0_7_handler,SEL_32bitCS,8E00h,0 ; INT 09 (irq1) dw so irq1_handler,SEL_32bitCS,8E00h,0 ; INT 0Ah - 0Fh (IRQ2 - IRQ8) dw 6 dup(so irq0_7_handler,SEL_32bitCS,8E00h,0) ; INT 10h - 6Fh dw 97 dup(so int_handler,SEL_32bitCS,8E00h,0) ; INT 70h - 78h (IRQ8 - IRQ15) dw 8 dup(so irq8_15_handler,SEL_32bitCS,8E00h,0) ; INT 79h - FFh dw 135 dup(so int_handler,SEL_32bitCS,8E00h,0) idt_size = $ - IDT ; размер IDT idtr dw idt_size-1 ; лимит IDT dd ? ; линейный адрес начала IDT ; содержимое регистра IDTR в реальном режиме idtr_real dw 3FFh,0,0 + Зубков. Гл
Обработчики прерываний Обработка обычного прерывания int_handler: iretd
Обработчик аппаратных прерываний IRQ0-IRQ7 irq0_7_handler: push eax mov al,20h out 20h,al pop eax iretd + Зубков. Гл
Обработчик аппаратного прерывания IRQ8-IRQ15 irq8_15_handler: push eax mov al,20h out 0A1h,al pop eax iretd + Зубков. Гл
Обработчик прерывания клавиатуры Зубков, гл. 10.5, процедура irq1_handler
Загрузка IDT и IDTR ; вычислить линейный адрес IDT pop eax add eax,offset IDT mov dword ptr idtr+2,eax ; загрузить IDT lidt fword ptr idtr
Схема обработки прерываний int N N*8 IDTR IDT дескриптор + Обработчик iretd
Обработка исключений Исключения – внутренние ситуации, возникающие при выполнении программы и требующие определенной реакции процессора Номера исключений совпадают с номерами аппаратных прерываний, поэтому если система обрабатывает исключения, то контроллер прерывания должен быть перепрограммирован так, чтобы аппаратные прерывания не попадали в область 0-1Fh (Зубков, гл ) Ряд исключений оставляет на стеке код ошибки, который должен быть прочитан со стека до выполнения iretd. В противном случае может возникнуть зависание системы
Формат кода ошибки