Исключения оборудования
Большинство стандартных исключений, распознаваемых операционной системой, являются аппаратными исключениями. Windows распознает несколько низкоуровневых программных исключений, однако обычно операционная система обрабатывает их лучше всего.
Windows сопоставляет аппаратные ошибки различных процессоров с кодами исключений, которые описаны в этом разделе. В некоторых случаях процессор может создавать только часть из этих исключений. Windows предварительно обрабатывает сведения об исключении и передает соответствующий код исключения.
В следующей таблице приводятся сведения об аппаратных исключениях, распознаваемых Windows.
Код исключения |
Причина исключения |
---|---|
STATUS_ACCESS_VIOLATION |
Чтение или запись в недоступный адрес в памяти. |
STATUS_BREAKPOINT |
Обнаружение аппаратной точки останова; используется только в отладчиках. |
STATUS_DATATYPE_MISALIGNMENT |
Чтение и запись в данные по адресу с неверным выравниванием. Например, 16-разрядные записи должны выравниваться относительно машинных слов с границей 2 байта. (Не применяется к процессорам Intel 80x86.) |
STATUS_FLOAT_DIVIDE_BY_ZERO |
Деление значения с плавающей запятой на 0,0. |
STATUS_FLOAT_OVERFLOW |
Превышение максимальной положительной экспоненты с плавающей запятой. |
STATUS_FLOAT_UNDERFLOW |
Превышение модуля наименьшей отрицательной экспоненты с плавающей запятой. |
STATUS_FLOATING_RESEVERED_OPERAND |
Использование зарезервированного формата с плавающей запятой (недопустимое использование формата). |
STATUS_ILLEGAL_INSTRUCTION |
Попытка выполнить код инструкции, не определенной процессором. |
STATUS_PRIVILEGED_INSTRUCTION |
Выполнение инструкции, которая не разрешена в текущем режиме машины. |
STATUS_INTEGER_DIVIDE_BY_ZERO |
Деление значения целочисленного типа на 0. |
STATUS_INTEGER_OVERFLOW |
Попытка выполнения операции, которая превышает диапазон целочисленного типа. |
STATUS_SINGLE_STEP |
Выполнение одной инструкции в пошаговом режиме; используется только в отладчиках. |
Большинство исключений, перечисленных в приведенной выше таблице, должны обрабатываться отладчиками, операционной системой или другим низкоуровневым кодом. Ваш код не должен обрабатывать эти ошибки, за исключением ошибок целочисленных значений и значений с плавающей запятой. Поэтому в большинстве случаев вам потребуется использовать фильтр обработки исключений, чтобы игнорировать исключения (значение 0). В противном случае низкоуровневые механизмы не смогут правильно реагировать на них. Однако вы можете написать обработчики завершения, чтобы предотвратить возможные последствия таких низкоуровневых ошибок.