小编Sti*_*ing的帖子

MASM 不会插入带有某些 CPU 和 FPU 指令组合的 x87 WAIT 前缀

Masm 允许在指令前使用不同的 cpu 组合,但某些组合不能正确检测需要等待前缀的协处理器指令,并且在需要等待前缀时将导致没有等待前缀。以下组合将导致它们之后的任何数学协处理器指令没有等待前缀:

    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
Run Code Online (Sandbox Code Playgroud)

如果然后使用数学协处理器指令,则不会创建等待前缀(通常由 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。

x86 assembly masm masm32 x87

3
推荐指数
1
解决办法
73
查看次数

标签 统计

assembly ×1

masm ×1

masm32 ×1

x86 ×1

x87 ×1