У меня есть вопрос об исключениях EXCEPTION_INT_OVERFLOW и EXCEPTION_INT_DIVIDE_BY_ZERO.
Windows перехватит ошибки #DE, сгенерированные IDIV инструкция и в конечном итоге сгенерирует исключение SEH с одним из этих двух кодов.
Вопрос, который у меня есть, заключается в том, как различать эти два состояния? Информация об idiv в руководстве Intel указывает, что он будет генерировать #DE как в «делении на ноль», так и в «случаях потери значимости».
Я быстро просмотрел раздел об ошибке #DE в томе 3 Intel, и лучшее, что я смог понять, это то, что ОС должна декодировать инструкцию DIV, загружать аргумент делителя и затем сравнивать его с нулем.
Это кажется мне немного безумным. Почему бы разработчикам микросхем не использовать какой-либо флаг, чтобы различать две причины ошибки? Я чувствую, что что-то упускаю.
Кто-нибудь знает наверняка, как ОС различает две разные причины сбоя?