我对EXCEPTION_INT_OVERFLOW和EXCEPTION_INT_DIVIDE_BY_ZERO异常有疑问。Win32 EXCEPTION_INT_OVERFLOW vs EXCEPTION_INT_DIVIDE_BY_ZERO
Windows将捕获IDIV指令产生的#DE错误,并最终以这两个代码之一产生SEH异常。
我的问题是如何区分这两个条件?英特尔手册中有关idiv的信息表明它将在“除以零”和“下溢情况”中生成#DE。
我简要介绍了intel手册第3卷中#DE错误的部分,我可以收集的最好的东西是操作系统必须解码DIV指令,加载除数参数,然后比较它归零。
虽然这对我来说似乎有点疯狂。为什么芯片设计者不会使用某种标志来区分错误的两个原因?我觉得我一定会错过一些东西。
有谁知道操作系统如何区分2种不同的失败原因?
你有没有任何文档指出`IDIV`甚至可以产生`EXCEPTION_INT_OVERFLOW`?我明白'INT_MIN/-1'是有问题的,但'EXCEPTION_INT_OVERFLOW`的描述似乎没有包含这种情况。 – 2011-02-15 02:59:15
@Ben我通过实验验证了它。当我做INT_MIN/-1时,IDIV指令产生EXCEPTION_INT_OVERFLOW,当我做INT_MIN/0时,我得到EXCEPTION_INT_DIVIDE_BY_ZERO。在这两种情况下,在试图执行IDIV指令后抛出异常。 – 2011-02-15 03:09:50