0

我正在做我的学校项目:Visual Studio 中的动态 MASM 汇编程序库,它实现了 CaesarCipher 的方法。当我使用控制台应用程序时,一切正常。当我创建 Windows 窗体 UI 时,MMX 函数开始导致错误。

MMX 函数 - 我的项目的问题。我认为在我的项目中没有使用它的意义,但我必须做的一件事是使用 MMX 代码,即使它没用。

在运行良好的控制台中:

movq mm1, mm0

在表单应用程序中,它会导致一般错误。

4

1 回答 1

5

使用 MMX 指令将导致 FPU 切换到 MMX 模式(有点,它不是真正的模式),这意味着所有 8 个 FPU 寄存器都将变为有效并可供 MMX 指令使用。在这种状态下使用 x87 指令很容易失败,所有 FPU 堆栈槽都已填满,因此加载任何内容都会导致 FPU 堆栈溢出。在控制台程序中,很容易出现根本没有使用 x87 指令的情况,因此让 FPU 处于该状态并不是什么大问题,但 windows 窗体使用一些 x87 指令,并且他们认为会有空间像往常一样的 FPU 堆栈。

您可以在使用 MMX 后使用emms指令清空 FPU 堆栈。

于 2015-11-13T13:08:12.403 回答