Далее приводится полный список исключений и прерываний. В этой таблице применяются следующие обозначения:
Номер вектора - номер вектора прерывания, на которое отображено исключение.
Название - используется в документации Intel и состоит из заглавных букв английского названия исключения, например, #DE - Divide Error.
Error code - наличие dw-кода ошибки, который процессор добавляет в стек обработчика перед передачей ему управления.
| Номер вектора | Название | Описание | Тип | Error Code | Источник исключения |
| 0 | #DE | Ошибка деления | Fault | Нет | Команды DIV и IDIV |
| 1 | #DB | Отладка | Fault/Trap | Нет | Любая команда или команда INT 1 |
| 2 | - | Прерывание NMI | Прерывание | Нет | Немаскируемое внешнее прерывание |
| 3 | #BP | Breakpoint | Trap | Нет | Команда INT 3 |
| 4 | #OF | Переполнение | Trap | Нет | Команда INTO |
| 5 | #BR | Превышение границ | Fault | Нет | Команда BOUND |
| 6 | #UD | Недопустимая команда (Invalid Opcode) | Fault | Нет | Недопустимая команда или команда UD21 |
| 7 | #NM | Устройство не доступно (No Math Coprocessor) | Fault | Нет | Команды плавающей точки или команда WAIT/FWAIT |
| 8 | #DF | Двойная ошибка | Abort | Да (Нуль) | Любая команда |
| 9 | - | Превышение сегмента сопроцессора (зарезервировано) | Fault | Нет | Команды плавающей точки2 |
| 0Ah | #TS | Недопустимый TSS | Fault | Да | Переключение задач или доступ к TSS |
| 0Bh | #NP | Сегмент не присутствует | Fault | Да | Загрузка сегментных регистров или доступ к сегментам |
| 0Ch | #SS | Ошибка сегмента стека | Fault | Да | Операции над стеком и загрузка в SS |
| 0Dh | #GP | Общая защита | Fault | Да | Любой доступ к памяти и прочие проверки защиты |
| 0Eh | #PF | Страничное нарушение | Fault | Да | Доступ к памяти |
| 0Fh | - | Зарезервировано Intel-ом. Не использовать. | Нет | ||
| 10h | #MF | Ошибка плавающей точки в x87 FPU (Ошибка математики) | Fault | Нет | Команда x87 FPU или команда WAIT/FWAIT |
| 11h | #AC | Проверка выравнивания | Fault | Да | (Нуль) Обращение к пямяти3 |
| 12h | #MC | Проверка оборудования | Abort | Нет | Наличие кодов и их содержимое зависит от модели4 |
| 13h | #XF | Исключение плавающей точки SIMD | Fault | Нет | Команды SSE и SSE25 |
| 14h-1Fh | - | Заререзвировано Intel-ом. Не использовать | |||
| 20h-FFh | - | Прерывания определяются пользователем | Прерывание | Внешнее прерывание или команда INT n |
Примечания:
| 1. | Команда UD2 появилась в процессоре Pentium Pro. |
| 2. | Процессоры IA-32 после Intel386 не генерируют это исключение. |
| 3. | Это исключение появилось в процессоре Intel486. |
| 4. | Это исключение появилось в процессоре Pentium и развивается в процессорах семейства P6. |
| 5. | Это исключение появилось в процессоре Pentium III. |
Некоторое небольшое число исключений, являющиеся ошибками, не позволяют продолжить выполнение программы, т.к. при их генерации теряется часть данных программы, в которой произошла ошибка. Например, выполнение команды POPAD при недостаточном размере стека, вызывает такое исключение. В таком случае, обработчик исключения будет подразумевать, что команда POPAD не выполнена, хотя часть регистров общего назначения уже может измениться. При обнаружении таких ошибок рекомендуется прекращать выполнение программы, вызвавшей сбой.
| Вопросы? Замечания? Пишите: sasm@narod.ru |
| Copyright © Александр Семенко. |
|
|