MMX 无效的浮点运算

Posted

技术标签:

【中文标题】MMX 无效的浮点运算【英文标题】:MMX Invalid floating point operation 【发布时间】:2016-04-30 21:24:52 【问题描述】:

使用 C++ Builder 6 并尝试运行此代码

  __int64 m64_1 = 1424115525456;
  __int64 m64_2 = 2222222222222;
  __int64 m64_3 = 1111111111111;


    __asm movq mm1, m64_1
    __asm paddd mm1, m64_2
    __asm movq m64_3, mm1

但我不执行除以零。 这个错误呢

【问题讨论】:

如果您是 MMX,您还必须使用 EMMS 我看不出它在哪里表明这些指令之一导致异常。你为什么认为它在那里? @wallyk 当我调试它时。我穿过 __asm 行并撞到 'Memo1->Text = "assemble"'; @harold 我的任务是使用 mmx 乘以数组。你认为 EMMS 会帮助我吗? EMMS 本身并没有帮助,但为了使后续代码安全,它是必需的。没有 EMMS-ing 会使 FPU 堆栈处于使几乎所有 FPU 代码立即崩溃的状态。导致的错误应该是FPU堆栈溢出但可能对话框没有区分 【参考方案1】:

只需在 mmx 命令后输入 __asm emms 像这样:

__asm movq mm1, m64_1;
__asm paddd mm1, m64_2;
__asm movq m64_3, mm1;
__asm emms

【讨论】:

您真的应该将此作为社区 wiki 答案,因为它实际上是 @harold 的答案。

以上是关于MMX 无效的浮点运算的主要内容,如果未能解决你的问题,请参考以下文章

发生了无效的浮点运算。 SQL Server 2008

对于包含无效值的数据集,我应该使用浮点的 NaN 还是浮点 + bool?

如何通过频率来计算cpu的浮点运算能力滴?

java运算疑惑 整型和浮点型混合运算

FPU 浮点运算单元和DSP指令

使用浮点运算对整数数据进行右移运算?