Что происходит в архитектуре x86 при возникновении прерывания?

Я изучаю x86 и Real Time Systems, и у меня есть вопрос:

Какие шаги x86 выполняет для обработки любого прерывания?

2 ответа

Когда происходит прерывание, процессор выполняет следующие действия:

  • Вставьте текущий адрес (содержимое указателя инструкций) в стек; также нажмите флаги процессора (но не все остальные регистры процессора)
  • Перейти к адресу ISR (подпрограммы обработки прерываний), который указан в таблице дескрипторов прерываний.

ISR должен делать следующее:

  • Нажмите любые регистры, которые он намерен изменить (или нажмите все регистры)
  • Обрабатывать прерывание
  • Reenable прерывания
  • Pop любые регистры, которые он нажал
  • Используйте инструкции IRET, которые извлекают флаги ЦП и значение указателя инструкций из стека (и, таким образом, возвращаются к тому, что выполнялось, когда произошло прерывание).

Начните здесь с таблицы дескрипторов прерываний. В основном, когда происходит прерывание, управление потоком переходит к этой таблице, а затем к тому, что находится в этой таблице. Кроме того, я полагаю, что все регистры выдвигаются, как только происходит прерывание, но я не уверен на 100% в этом, так как прошло много времени с тех пор, как я с этим справился.

Другие вопросы по тегам