概要尝试关闭计算机、启动 Windows 或 Windows 内的程序时,可能遇到类似下面的错误消息:
在 xxxx:xxxxxxxx 位置发生了致命异常 XY
致命异常错误是由程序在下列情况下返回的代码:
发生了对非法指令的访问
访问了无效的数据或代码
某个操作的权限级别无效 出现上述任何一种情况时,处理器都会向操作系统返回一个异常错误,接着,该异常错误被作为“致命异常错误”加以处理。多数情况下,异常错误是不可恢复的,而且系统必须重新启动或关闭,这取决于错误的严重程度。
在上面列出的示例错误消息中,XY 代表实际的处理器异常号(从 00 至 0F)(请注意,在下面的说明中,0E、0F 等后面的 h 通常在错误消息中省略。)xxxx:xxxxxxxx 值代表了指向代码段的增强型指令指针;这个 32 位地址是发生异常错误的实际地址。
Windows 不会引发这些错误,但 Windows 具有针对这些特殊处理器异常的异常处理例程,错误消息就是由这些例程显示的。
备注:本文主要提供相关信息。单击下面的链接可转到本文的“致命异常错误的故障排除”一节:
更多信息
处理器异常及其定义
00: Divide Fault(除法错误)
当处理器遇到除法错误时,将返回本异常。如果执行除以 0 操作,或操作结果不符合目标操作数的要求,就会发生除法错误。
02: NMI interrupt(NMI 中断)
2 号中断是为硬件发生非屏蔽中断保留的。不会通过 2 号中断捕获异常。
04: Overflow Trap(溢出捕获)
执行了 INTO 指令并且 0F 位被设为 1 时,就会出现溢出捕获。
05: Bounds Check Fault(边界检查错误)
BOUND 指令将把数组脚标与上、下边界进行对比。如果脚标超出范围,处理器就会捕获到 05 号中断。
06: Invalid Opcode Fault(无效操作码错误)
如果下列任何条件之一为成立,即返回该错误:
处理器试图对某个与任何合法计算机指令都不对应的位结构进行解码。
处理器试图执行某个包含无效操作数的指令。
当处理器正运行于虚拟的 8086 模式下时,试图执行保护模式的指令。
处理器试图用某个无法锁定的指令来执行 LOCK 前缀。
07: Coprocessor Not Available Fault(协处理器不可用错误)
如果计算机没有算术协处理器,而且寄存器 CR0 的 EM 位指示当前正在使用“数字数据处理器”仿真,就会出现该错误。每当执行浮点运算时,就会发生 07 号中断。
如果使用算术协处理器并执行任务切换,也会发生此类错误。07 号中断告诉处理器:需要保存协处理器的当前状态,以便其它任务使用。
08: Double Fault(双重错误)
对异常的处理有时会触发另一个异常。出现该情况时,处理器将为双重错误发出 08 号中断。
09: Coprocessor Segment Overrun(协处理器段超限)
如果浮点指令引起内存存取超过了段尾,就会发生该错误。如果浮点运算数的起始地址位于段外,就会发生“常规保护错误”(0D 号中断)。
10 (0Ah):Invalid Task State Segment Fault(无效任务状态段错误)
由于“任务状态段”中包含很多描述符,多种情况可引发 0A 异常。通常,处理器可以从“任务状态段”收集到足够的信息,来发出指向实际问题的另一个错误。有关详细信息,请参见 Microsoft's Programming the 80386/80486 Guide。
11 (0Bh):Not Present Fault(不存在错误)
“不存在”中断允许操作系统通过分段机制实现虚拟内存。当某个段被标记为“不存在”时,该段即被换出到磁盘中。当应用程序需要访问该段时,即触发 0B 号中断错误。
12 (0Ch):Stack Fault(堆栈错误)
如果某个指令所引用的内存超出了堆栈段的限制,就会发生“堆栈错误”,其错误代码为 0。如果操作系统支持向下扩展的段,则增加堆栈的大小应当能缓解该问题。向堆栈段加载无效描述符将引发常规保护错误。
13 (0Dh):General Protection Fault(常规保护错误)
未被其它任何处理器异常所涵盖的任何条件都将引发常规保护错误。该异常指示在内存中此程序已被损坏,通常导致程序立即终止。
14 (0Eh):Page Fault(页面错误)
“页面错误”中断允许操作系统根据分页的需要来实现虚拟内存。访问分页目录项或分页表时,如果存在位为 0(即不存在),通常就会发出 14 号中断。操作系统将使该页存在(通常从虚拟内存中检索并调回该页),然后重新发出有错误的指令,这样,该指令即可访问该段。如果违反分页保护规则(检索失败,或检索到的数据无效,或者发出错误的代码破坏了处理器的保护规则),也会引发页面错误。上述情况下,操作系统将接管控制,并进行相应的处理。
16 (10h):Coprocessor Error Fault(协处理器出错错误)
当某个未屏蔽的浮点异常发出以前的指令时,就会引发该中断。(由于 80386 无法访问“浮点单元”,因此它需要检查 ERROR\ 管脚来测试这种情况。)如果在 CR0 设置了“模拟算术协处理器”位,则 WAIT 指令也会触发该中断。
17 (11h):Alignment Check Fault(对齐检查错误)
该中断仅用于 80486 CPU。下列情况下将发出 17 号中断:在环权限 3 上的代码试图访问某个未在偶数地址范围内的字运算数,或者试图访问无法被 4 整除的双字运算数,或者试图访问其地址不能被 8 整除的长实型或临时实型运算数。CPU 首次加电时将禁用对齐检查,它仅在保护模式下启用。
致命异常错误的故障排除
干净启动计算机
因为引起致命异常错误的条件各不相同,所以解决问题的第一步是缩小可能范围。为此,可尝试“干净启动”计算机。
所谓“干净启动”故障排除,是指减少由于计算机环境所产生的问题。出现的许多问题是由相互冲突的驱动程序、内存驻留程序 (TSR) 以及其它启动计算机时所装载的设置而引起的。关于如何干净启动计算机的其它信息,请单击以下文章编号,查看相应的 Microsoft Knowledge Base 文章:
192926 如何进行干净启动以排除 Windows 98 故障
243039 如何在 Windows 95 中执行干净启动
查询 Microsoft Knowledge Base
要确定您收到的错误消息在 Microsoft Knowledge Base 中是否有记录,请执行以下步骤:
连接下列 Microsoft 支持联机 Web 站点:
http://support.microsoft.com/support/
单击 Searchable Knowledge Base 链接,然后在 My search is about 框中单击 Windows 95、Windows 98、Windows 98 第二版或 Windows Millennium Edition。
在 I want to search by 框中选择要执行的查询类型,然后在 My question is 框中键入一个或多个与您的问题有关的查询字。
备注:键入查询字时,可以不使用错误消息的准确地址。不同的计算机上该地址可能会有所不同,但问题却可能是相同的。例如,如果收到错误消息“IOS VXD”,请使用以下查询字:ios、vxd、fatal 和 exception,然后单击 Go。
单击 Go 之后,将看到一个文章列表,其中包含所键入的查询字。查阅这些文章,看哪些主题可能适用于您遇到的问题。 有关如何查询 Microsoft Knowledge Base 的其它信息,请单击以下文章编号,查看相应的 Microsoft Knowledge Base 文章:
168242 如何在 Knowledge Base 中搜索 Windows 95/98 文章
242450 如何使用关键字查询 Microsoft Knowledge Base
有关致命异常错误消息的文章
有关致命异常错误消息的其它信息,请单击以下文章编号,查看相应的 Microsoft Knowledge Base 文章:
133440 错误消息:该程序在 00457:000040B1 位置导致致命异常 0D 并将被终止
192803 使用 ATI All-in-Wonder Pro Video Adapter 时致命异常 0D
175211 打开或关闭“控制面板”时出现致命异常错误
171195 暂停和继续执行 MSDLC32 时出现致命异常错误
187214 错误消息:在 0028:C02A0201 位置出现致命异常错误 0E...
190123 错误消息:下列位置已出现致命异常 06 ...
252523 试图连接 Internet 时出现致命异常错误消息
189655 错误消息:在 0028:<XXXXXXXX> 位置出现致命异常 0E
备注:上述文章列表并未包括所有文章。如果某篇文章未能解决您的问题,请使用本文“查询 Microsoft Knowledge Base”部分中的步骤,查找更为详细的信息。
这篇文章中的信息适用于:
Microsoft Windows Millennium Edition
Microsoft Windows 98 Second Edition
Microsoft Windows 98
Microsoft Windows 95