【问题标题】:Who throws the division by zero exception in .Net谁在.Net中引发除零异常
【发布时间】:2016-06-03 05:28:40
【问题描述】:

除以零是 CPU 级别不允许的操作。在 ASM 中编写除以零的程序将导致 CPU 上的陷阱由除法溢出中断线执行到 OS。我的问题是异常是源自 CPU 还是框架本身在其运算符中处理它?

【问题讨论】:

  • 我想你可以检查一下。在 CPU 中,每个事件都有处理。 stackoverflow.com/questions/23878400/…
  • 我认为没有一个简单直接的答案。每个运行时(例如 x86、x64、ARM)都必须实现正确的语义,但是通过让硬件陷入陷阱还是通过显式检查减慢每个除法运算更容易实现它们,可能需要权衡取舍。
  • 这是关于整数除法,还是例如与DecimalBigInteger 的除法?它可以有所作为。请注意,SingleDouble 的除法通常不会引发 CLR 异常。相反,您可以得到正无穷或负无穷,或非数字作为商。

标签: .net exception divide-by-zero


【解决方案1】:

嗯,通过在端口 20 和 21 中通过 int 15 对 int 0a 和 0d 进行编程,我在 Pentium III 克隆上有一个非常明确的除以零错误。这是一个真正的标志 confiremd stack overfloe by int 00。OV、DN 和ZR 已设置。当处于实模式和 PM 时,错误会更改指针,但仍然设置标志 - 除了 PM 提供指示错误的进位。EMM386 有时将其报告为不可恢复的错误。究竟什么是不可恢复的错误,它真的是不可恢复的 - 我会期望即使是最不可恢复的错误也可能通过一些努力和专注来恢复——这可能吗?如果关闭堆栈并跟踪没有堆栈的错误 - 或者只是不使用堆栈并切换到 Dr.DOS 7.03 - 如果 DR.DOS 可以找到某种形式的解决方案,那么一定有某种形式的解决方案。我使用 iret 设置在启动期间通过调试断点并通过管道传递一个补丁,我用它来跟踪错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多