Далее приводится полный список исключений и прерываний. В этой таблице применяются следующие обозначения:
Номер вектора - номер вектора прерывания, на которое отображено исключение.
Название - используется в документации 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 © Александр Семенко. |