[ЭКЗАМЕН 30] Срабатывание прерывания. Обработчик прерывания в реальном режиме. Возврат из обработчика прерывания. - mRrvz/bmstu-asm GitHub Wiki
Срабатывание прерывания
- Сохранение в текущий стек регистра флагов и адреса возврата (адреса следующей команды)
- Передача управления по адресу обработчика из таблицы векторов
- Настройка стека (возможно, обработчику прерываний нужен свой стек, потому что стек остается связан с той программой, которая работала до срабатывания прерывания; если обработчик сложный, то иногда такие обработчики перенастраивают стек)
- Повторная входимость (реентерабельность), необходимость запрета прерываний (Кузнецов: "таймер тикает, срабатывают прерывания. В какой-то момент прерывание тика таймера не успевает отработать до след тика, вызывается еще раз тоже прерывание и нужно обеспечить корректную работу в такой ситуации"; запрет прерывания можно делать только на короткий срок, иначе можно потерять данные (переполнение буфера клавиатуры, например))
Обработчик прерывания в реальном режиме
Располагается в самом начале памяти, начиная с адреса 0. Доступно 256 прерываний. Каждый вектор занимает 4 байта - полный адрес. Размер всей таблицы - 1 Кб.
Возврат из обработчика прерываний
IRET - используется для выхода из обработчика прерывания. Восстанавливает FLAGS, CS:IP. При необходимости выставить значение флага обработчик меняет его значение непосредственно в стеке.
Следующий вопрос: Процессор 80386. Разрядность, регистры.
Предыдущий вопрос: Прерывания. Назначение, виды прерываний. Таблица векторов прерываний.