Win32 EXCEPTION_INT_OVERFLOW против EXCEPTION_INT_DIVIDE_BY_ZERO

У меня есть вопрос об исключениях EXCEPTION_INT_OVERFLOW и EXCEPTION_INT_DIVIDE_BY_ZERO.

Windows перехватит ошибки #DE, сгенерированные IDIV инструкция и в конечном итоге сгенерирует исключение SEH с одним из этих двух кодов.

Вопрос, который у меня есть, заключается в том, как различать эти два состояния? Информация об idiv в руководстве Intel указывает, что он будет генерировать #DE как в «делении на ноль», так и в «случаях потери значимости».

Я быстро просмотрел раздел об ошибке #DE в томе 3 Intel, и лучшее, что я смог понять, это то, что ОС должна декодировать инструкцию DIV, загружать аргумент делителя и затем сравнивать его с нулем.

Это кажется мне немного безумным. Почему бы разработчикам микросхем не использовать какой-либо флаг, чтобы различать две причины ошибки? Я чувствую, что что-то упускаю.

Кто-нибудь знает наверняка, как ОС различает две разные причины сбоя?

10
задан Devendra D. Chavan 15 February 2011 в 01:58
поделиться