FMUL не очищает переполнение в регистре STATUS

У меня есть этот код Win32:

fld x
fmul y
fstsw ax

Кажется, что fmul не очищает бит регистров состояния FPU, т.е. если переполнение уже было установлено (ax & 8) тогда он останется установленным после fmul, Это правильное поведение? Требуется ли очистить статус после или перед операциями FPU?

Т.е. я полагаю fmul установит этот бит, но должен ли он сбросить его? Я не мог найти ответ в Интернете.

1 ответ

Решение

Вы держите пари, что это правильное поведение.

От 8.1.3.3 x87 FPU Floating-Point Exception Flags из Intel® 64 and IA-32 Architectures Software Developer’s Manual, том 1:

Флаги исключения являются "липкими" битами (после установки они остаются установленными, пока не будут явно очищены). Их можно очистить, выполнив инструкции FCLEX/FNCLEX (очистить исключения), повторно инициализировав FPU x87 с помощью команд FINIT/FNINIT или FSAVE/FNSAVE, или переписав флаги инструкцией FRSTOR или FLDENV.

Не требуется сбрасывать эти флаги, если исключения FPU отключены.

Другие вопросы по тегам