微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

中止异常“不允许精确定位导致异常的指令”是什么意思?

如何解决中止异常“不允许精确定位导致异常的指令”是什么意思?

摘自英特尔 80386 程序员参考手册 CH9:

异常根据方式分为故障、陷阱或中止 它们被报告以及是否重新启动导致 支持异常。

中止:中止是一种例外,它既不允许精确定位 导致异常的指令 或程序重新启动 导致异常。中止用于报告严重错误, 例如系统中的硬件错误和不一致或非法的值 表。

(强调我的)

中止是不允许精确定位导致异常的指令的异常究竟是什么意思?

解决方法

只有 2 个“中止”例外:

a) 双故障异常。当尝试启动一个异常导致第二个异常时会发生这种情况;其中指令指针(在启动双故障异常处理程序时由 CPU 保存)可能来自原始指令、第一个异常、第二个异常、其他或什么都没有。在这种情况下,因为 CPU 无法启动第一个或第二个异常处理程序,所以无论如何都无法从双重错误返回到第二个(或第一个)异常处理程序。

b) 机器检查异常。这纯粹是针对硬件故障,您可能不想假设内存、缓存或 CPU 实际工作。您不能指望故障硬件会产生“保证行为”。

注1:技术上,对于一些机器检查的原因,你可以返回到发生异常中断的任何地方的精确位置;您只需要非常小心地确定您是否可以/不能返回(并且需要某种方法来修复/解决硬件问题,以便从机器检查异常处理程序返回不会触发第二台机器检查异常)。

注意 2:双故障或机器检查之前的异常完全有可能由根本不是指令的东西引起(例如由 IRQ 引起)。在这些情况下,“指令的精确位置导致异常”将是“不存在的东西的精确位置”。英特尔的话应该被解释为有条件的(比如“一个异常,它既不允许导致异常的指令的精确位置(如果有),也不允许重新启动导致异常的程序(如果有)”)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。