Я должен вытолкать код ошибки, продвинутый сложить определенными исключениями прежде, чем возвратиться из обработчика прерываний?

Убедитесь, что у вас есть соответствующая версия загрузчика, а также убедитесь, что у вас есть этот метатег в голове

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
6
задан Ciro Santilli 新疆改造中心法轮功六四事件 28 October 2015 в 18:11
поделиться

2 ответа

Если бы ЦП продвинул код ошибки автоматически, то обработчик должен вытолкать его перед iret. iret инструкция не знает, куда Вы происходите из, если это - отказ, прерывание или внешнее прерывание. Это всегда делает то же, и это предполагает, что нет никакого кода ошибки на стеке.

Заключение в кавычки из SDM (Руководство Разработчика программного обеспечения), Объем 3, Глава 5, разделяет 5.13 названных Кодов ошибки:

Код ошибки продвинут на стеке как двойное слово или слово (в зависимости от прерывания по умолчанию, прерывания или размера элемента переключения задач). Для хранения стека выровненным для нажатий двойного слова верхняя половина кода ошибки резервируется. Обратите внимание, что код ошибки не выталкивается, когда инструкция IRET выполняется для возврата из обработчика исключений, таким образом, обработчик должен удалить код ошибки прежде, чем выполнить возврат.

Можно найти Руководство разработчика программного обеспечения IA-32 здесь: http://www.intel.com/products/processor/manuals/

Объем 3 части 1, глава 5, описывает обработку исключений и обработку прерываний. Объем 2 части 1 имеет спецификацию для iret инструкция.

13
ответ дан 8 December 2019 в 16:10
поделиться

Я записал маленькую x86 ОС некоторое время назад. Смотрите на файл isr.asm в cvs репозитории.

Заметьте, как мы настраиваем обработчики, большая часть нажатия макет dword на стек для составления нескольких обработчиков, которые автоматически продвинули код ошибки. Затем, когда мы возвращаемся через iret, мы можем всегда принимать 2 dwords на стеке независимо от прерывания и выполнять добавить ESP, 8 перед iret для чистки вещей приятно.

Это должно ответить на Ваш первый вопрос.

Что касается Вашего второго вопроса: двойной отказ при включении прерываний... hmmm, мог быть проблемой с подкачкой страниц, если Вы не настроили его правильно. Мог быть миллион других вещей также :)

1
ответ дан 8 December 2019 в 16:10
поделиться