Masm допускает различные комбинации ЦП перед инструкциями, но некоторые комбинации неправильно определяют инструкции сопроцессора, требующие префикса ожидания, и не вызовут префикса ожидания, когда требуется префикс ожидания. Следующие комбинации приведут к тому, что любые инструкции математического сопроцессора после них не будут иметь префикс ожидания NO:
example 1: .386 .8087 ;now enter math coprocessor instruction example 2: .286 .8087 ;now enter math coprocessor instruction example 3: .386 .287 ;now enter math coprocessor instruction
если затем используется инструкция математического сопроцессора, префикс ожидания (который обычно создается MASM) НЕ будет создан. Вот инструкции, которые НЕ будут иметь префикс ожидания, когда он должен быть:
FRSTOR, FFREE, FDECSTP, FINCSTP, FLDENV, FLDCW FLD, FST, FSTP, FXCH, FLDZ, FLD1, FLDPI, FLDL2E, FLDL2T, FLDLG2, FLDLN2, FILD, FIST, FISTP, FBLD, FBSTP, FCOM, FCOMP, FCOMPP, FICOM ,FICOMP,FXAM,FADD,FADDP, FMUL,FMULP,FSUB,FSUBP,FSUBR,FSUBRP,FDIV,FDIVP, FDIVR,FDIVRP,FABS,FCHS,FSQRT,FRNDINT,FIADD,FIMUL, FISUB,FISUBR,FIDIV,FIDIVR,FPTAN ,FPATAN,F2XM1,FSCALE, FYL2X,FYL2XP1,FPREM,FPREM1,FXTRACT,FSETPM и FNOP
Эти инструкции не затрагиваются:
FCLEX,FNCLEX,FSAVE,FNSAVE,FENI,FNENI,FDISI,FNDISI, FSTENV,FNSTENV,FINIT,FNINIT,FSTSW,FNSTSW,FSTCW и FNSTCW
Это ошибка? Я не нашел документации, в которой упоминается это поведение. У меня нет более поздней версии MASM, чтобы проверить, исправлено ли это. У меня версия masm v6.