Что происходит в архитектуре x86 при возникновении прерывания?
Я изучаю x86 и Real Time Systems, и у меня есть вопрос:
Какие шаги x86 выполняет для обработки любого прерывания?
2 ответа
Когда происходит прерывание, процессор выполняет следующие действия:
- Вставьте текущий адрес (содержимое указателя инструкций) в стек; также нажмите флаги процессора (но не все остальные регистры процессора)
- Перейти к адресу ISR (подпрограммы обработки прерываний), который указан в таблице дескрипторов прерываний.
ISR должен делать следующее:
- Нажмите любые регистры, которые он намерен изменить (или нажмите все регистры)
- Обрабатывать прерывание
- Reenable прерывания
- Pop любые регистры, которые он нажал
- Используйте инструкции IRET, которые извлекают флаги ЦП и значение указателя инструкций из стека (и, таким образом, возвращаются к тому, что выполнялось, когда произошло прерывание).
Начните здесь с таблицы дескрипторов прерываний. В основном, когда происходит прерывание, управление потоком переходит к этой таблице, а затем к тому, что находится в этой таблице. Кроме того, я полагаю, что все регистры выдвигаются, как только происходит прерывание, но я не уверен на 100% в этом, так как прошло много времени с тех пор, как я с этим справился.