【问题标题】:MMX Invalid floating point operationMMX 无效的浮点运算
【发布时间】: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堆栈溢出但可能对话框没有区分

标签: c++ assembly c++builder-6 mmx


【解决方案1】:

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

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

【讨论】:

  • 您真的应该将此作为社区 wiki 答案,因为它实际上是 @harold 的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多