Я загрузил таблицу idt с 256 записями, все они указывают на похожие обработчики:
- для исключений 8 и 10-14 введите номер исключения (эти исключения автоматически добавляют код ошибки)
- для остальных введите «фиктивный» код ошибки и номер исключения;
- затем перейдите к общему обработчику
Поэтому, когда входит общий обработчик, стек правильно выровнен и содержит номер исключения / прерывания, код ошибки (который может быть фиктивным), eflags, cs и eip.
Мой вопрос касается возврата из обработчика прерывания. Я использую iret
для возврата после извлечения номера исключения и кода ошибки из стека, но это не работает для исключения № 8; если я оставлю код ошибки в стеке, он вернется нормально!
Вопросы:
- я должен оставить код ошибки в стеке для исключений, которые помещают туда код ошибки? Если да, то как
iret
определяет, должен ли он выдавать код ошибки или нет? - как только я включаю прерывания, я всегда получаю исключение 8 (двойная ошибка), но тогда все работает нормально (я разрабатываю ОС для хобби). Это нормальное поведение или у меня где-то есть ошибка?