Ваши предположения кажутся правильными. Единственная информация, доступная на #DE, - это CS и EIP, которые дают инструкцию. Поскольку два кода состояния различны, ОС должна декодировать инструкцию, чтобы определить, какие именно.
Я бы также предположил, что производителям микросхем на самом деле не нужны два отдельных прерывания для этого случая, поскольку все, что делится на ноль, это бесконечность, которая слишком велика, чтобы вписаться в ваш регистр назначения.
Что касается «точного знания» того, как оно дифференцируется, то всем тем, кто знает, вероятно, не позволено раскрывать его, либо чтобы люди не могли его использовать (не совсем уверен, как, но переход в режим ядра - хорошее место для начните использовать) или делайте предположения на основе деталей реализации, которые могут быть изменены без предварительного уведомления.
Редактировать: Поиграв с kd, я могу, по крайней мере, сказать, что в конкретной версии Windows XP (32-разрядной) у меня был доступ (и процессор, на котором он работал) к nt!Ki386CheckDivideByZeroTrap
По-видимому, обработчик прерываний декодирует значение ModRM инструкции, чтобы определить, следует ли возвращать STATUS_INTEGER_DIVIDE_BY_ZERO
или STATUS_INTEGER_OVERFLOW
.
(Очевидно, что это оригинальное исследование, нигде никому не гарантированное, а также оно соответствует выводам, которые могут быть сделаны на основании руководств Intel.)