我對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