我正在做我的学校项目:Visual Studio中的动态MASM汇编程序库,它实现了CaesarCipher的方法。当我使用控制台应用程序时,一切正常。当我创建Windows窗体UI时,MMX函数开始导致错误。
MMX功能 - 我的项目问题。我觉得在我的项目中没有使用它,但我要做的一件事就是使用MMX代码,即使它没用。
在运行良好的控制台中:
movq mm1, mm0
在Forms Application中,它会导致一般错误。
答案 0 :(得分:5)
使用MMX指令将导致FPU切换到MMX模式(某种程度上,它实际上不是模式),这意味着所有8个FPU寄存器都将生效并准备好供MMX指令使用。在此状态下使用x87指令很容易失败,所有FPU堆栈插槽都被填满,因此加载任何内容都会导致FPU堆栈溢出。在一个控制台程序中很容易就会出现没有使用x87指令的情况,因此将FPU保留在该状态并不是一个大问题,但是Windows窗体使用了一些x87指令,他们认为会有空间像往常一样FPU堆栈。
使用emms指令使用MMX后,可以清空FPU堆栈。