online help
Fatal Exception Errors
When you attempt to shut down your computer, start Windows, or start a program
in Windows, you may encounter error messages that are similar to:
A fatal exception XY has occurred at xxxx:xxxxxxxx
Fatal exception errors are codes that are returned by a program in the following
cases:
- Access to an illegal instruction has been encountered
- Invalid data or code has been accessed
- The privilege level of an operation is invalid
When any of these cases occurs, the processor returns an exception to the operating
system, which in turn is handled as a fatal exception error. In many cases the
exception is non-recoverable and the system must either be restarted or shut
down, depending upon the severity of the error.
In the sample error message that is listed above, XY represents the actual
processor exception from 00 to 0F. (Note that the "h" that is listed after the
0E, 0F, and so on, in the explanations below is frequently omitted from the
error message.) The xxxx:xxxxxxxx value represents the enhanced instruction
pointer to the code segment; the 32-bit address is the actual address where
the exception occurred.
Windows does not cause these errors, but has the exception-handling routine
for that particular processor exception, which displays the error message.
Processor Exceptions and their Definitions
00: Divide Fault
The processor returns this exception when it encounters a divide fault. A divide
fault occurs if division by zero is attempted or if the result of the operation
does not fit in the destination operand.
02: NMI Interrupt
Interrupt 2 is reserved for the hardware Non-Maskable-Interrupt condition. No
exceptions trap through interrupt 2.
04: Overflow Trap
The overflow trap occurs after an INTO instruction has executed and the 0F bit
is set to 1.
05: Bounds Check Fault
The BOUND instruction compares the array index with an upper and lower bound.
If the index is out of range, then the processor traps to interrupt 05.
06: Invalid Opcode Fault
This error is returned if any one of the following conditions exists: - The
processor tries to decode a bit pattern that does not correspond to any legal
computer instruction.
- The processor attempts to execute an instruction that contains invalid operands.
- The processor attempts to execute a protected-mode instruction while running
in virtual 8086 mode.
- The processor tries to execute a LOCK prefix with an instruction that cannot
be locked.
07: Coprocessor Not Available Fault
This error occurs if the computer does not have a math coprocessor and the EM
bit of register CR0 is set indicating that Numeric Data Processor emulation
is being used. Each time a floating point operation is executed, an interrupt
07 occurs.
This error also occurs when a math coprocessor is used and a task switch is
executed. Interrupt 07 tells the processor that the current state of the coprocessor
needs to be saved so that it can be used by another task.
08: Double Fault
Processing an exception sometimes triggers a second exception. In the event
that this occurs, the processor will issue a interrupt 08 for a double fault.
09: Coprocessor Segment Overrun
This error occurs when a floating point instruction causes a memory access that
runs beyond the end of the segment. If the starting address of the floating
point operand is outside the segment, then a General Protection Fault occurs
(interrupt 0D).
10 (0Ah): Invalid Task State Segment Fault
Because the Task State Segment contains a number of descriptors, any number
of conditions can cause exception 0A. Typically, the processor can gather enough
information from the Task State Segment to issue another fault pointing to the
actual problem.
11 (0Bh): Not Present Fault
The Not present interrupt allows the operating system to implement virtual memory
through the segmentation mechanism. When a segment is marked as "not present,"
the segment is swapped out to disk. The interrupt 0B fault is triggered when
an application needs access to the segment.
12 (0Ch): Stack Fault
A Stack Fault occurs with error code 0 if an instruction refers to memory beyond
the limit of the stack segment. If the operating system supports expand-down
segments, increasing the size of the stack should alleviate the problem. Loading
the Stack Segment with invalid descriptors will result in a general protection
fault.
13 (0Dh): General Protection Fault
Any condition that is not covered by any of the other processor exceptions will
result in a general protection fault. The exception indicates that this program
has been corrupted in memory, usually resulting in immediate termination of
the program.
14 (0Eh): Page Fault
The Page Fault interrupt allows the operating system to implement virtual memory
on a demand-paged basis. An interrupt 14 usually is issued when an access to
a page directory entry or page table with the present bit set to 0 (Not present)
occurs. The operating system makes the page present (usually retrieves the page
from virtual memory) and re-issues the faulting instruction, which then can
access the segment. A page fault also occurs when a paging protection rule is
violated (when the retrieve fails, or data retrieved is invalid, or the code
that issued the fault broke the protection rule for the processor). In these
cases the operating system takes over for the appropriate action.
16 (10h): Coprocessor Error Fault
This interrupt occurs when an unmasked floating-point exception has signaled
a previous instruction. (Because the 80386 does not have access to the Floating
Point unit, it checks the ERROR\ pin to test for this condition.) This is also
triggered by a WAIT instruction if the Emulate Math Coprocessor bit at CR0 is
set.
17 (11h): Alignment Check Fault
This interrupt is only used on the 80486 CPUs. An interrupt 17 is issued when
code executing at ring privilege 3 attempts to access a word operand that is
not on an even-address boundary, a double-word operand that is not divisible
by four, or a long real or temp real whose address is not divisible by eight.
Alignment checking is disabled when the CPU is first powered up and is only
enabled in protected mode.