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 无效的浮点运算的主要内容,如果未能解决你的问题,请参考以下文章