SUMMARY
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.
NOTE: This article is primarily for informational use. Click the
following link to go to the "Troubleshooting Fatal Exception Errors" section of
this article:
MORE INFORMATION
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. See
Microsoft's Programming the
80386/80486 Guide for more information.
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.
Troubleshooting Fatal Exception Errors
Clean Boot Your Computer
Because there are many conditions that can cause a fatal
exception error, the first step in resolving the issue is to narrow the focus.
To narrow the focus, try a "clean boot" of your computer.
Clean-boot
troubleshooting refers to methods of reducing problems that may occur because
of your computer's environment. Many problems occur because of conflicting
drivers, terminate-and-stay-resident programs (TSRs), and other settings that
are loaded when your computer starts.
For additional information about how to clean-boot your computer, click the
following article numbers to view the articles in the Microsoft Knowledge Base:
192926
How to perform clean-boot troubleshooting for Windows 98
243039 How to perform a clean boot in Windows 95
Query The Microsoft Knowledge Base
To determine if the error message that you are receiving is
documented in the Microsoft Knowledge Base, search the Microsoft Knowledge Base
at:
242450 How to query the Microsoft Knowledge Base using keywords
Articles About Fatal Exception Error Messages
For additional information
about fatal exception error messages, click the following article numbers to
view the articles in the Microsoft Knowledge Base:
133440
Error Message: This program has caused a fatal exception 0D at 00457:000040B1 and will be terminated
192803 Fatal exception 0D using ATI All-in-Wonder Pro Video adapter
175211 Fatal exception error when opening or closing Control Panel
171195 Fatal exception error suspending and resuming with MSDLC32
187214 Err msg: a fatal exception 0E has occurred at 0028:C02A0201...
190123 Error message: a fatal exception 06 has occurred at...
252523 Fatal exception error message when attempting to connect to the Internet
189655 A fatal exception 0E Has occurred at 0028:<XXXXXXXX> error message
NOTE This list of articles is not comprehensive. If one of these
articles does not address your issue, use the steps in the "Query the Microsoft
Knowledge Base" section of this article to find more information.