Masm 允许在指令前使用不同的 cpu 组合,但某些组合不能正确检测需要等待前缀的协处理器指令,并且在需要等待前缀时将导致没有等待前缀。以下组合将导致它们之后的任何数学协处理器指令没有等待前缀:
Run Code Online (Sandbox Code Playgroud)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。