Информатика и технология программирования


Механизм прерываний в архитектуре I - часть 2



void interrupt (*IVEC[256])();


*(--SP) = FLAGS;
*(--SP) = _CS;
*(--SP) = _IP;
_CS = MK_SEG(IVEC[N]);
_IP = MK_OFFS(IVEC[N]);

Сама процедура обработки прерывания должна содержать несколько обязательных действий :



- выполнить действия с устройством, источником прерываний, которые должны привести к снятию требования прерывания этим источником (например, считать очередную порцию данных, запретить прерывание от источника в устройстве или по линии запроса в контроллере прерываний);



- выполнить команду для контроллера прерываний outportb(0x20,0x20), разрешающую ему продолжить процесс обслуживания последующих запросов на прерывания;



- поскольку при входе в прерывание процессор устанавливается в состояние запрещения прерывания, то реально обработка следующего прерывания может произойти только после выхода из текущего. Этим самым исключается возможность появления ВЛОЖЕННЫХ ПРЕРЫВАНИЙ (см.ниже).

Выход из прерывания представляет собой восстановление из стека состояния прерванной программы по команде процессора reti , что на аппаратном уровне выглядит следующим образом :


_IP = *SP++;
_CS = *SP++;
FLAGS = *SP++;




Начало  Назад  Вперед



Книжный магазин