0

私は学校のプロジェクトを行っています: Visual Studio の動的 MASM アセンブラー ライブラリで、CaesarCipher のメソッドを実装しています。コンソールアプリケーションを使用していたときは、すべてうまくいきました。Windows フォーム UI を作成すると、MMX 関数でエラーが発生し始めました。

MMX 関数 - 私のプロジェクトの問題。私のプロジェクトではそれを使用する意味がありませんが、私がしなければならないことの 1 つは、役に立たなくても MMX コードを使用することです。

正常に機能したコンソールで:

movq mm1, mm0

Forms アプリケーションでは、一般的なエラーが発生します。

4

1 に答える 1

5

MMX 命令を使用すると、FPU が MMX モード (一種の、実際にはモードではない) に切り替わります。これは、8 つの FPU レジスタすべてが有効になり、MMX 命令で使用できるようになることを意味します。この状態で x87 命令を使用すると、簡単に失敗する可能性があります。すべての FPU スタック スロットがいっぱいになるため、何かをロードすると FPU スタック オーバーフローが発生します。コンソール プログラムでは、x87 命令がまったく使用されていない場合がよくあるため、FPU をその状態のままにしておくことは大きな問題ではありませんでしたが、Windows フォームではいくつかの x87 命令が使用され、スペースがあると想定されていました。通常どおり FPU スタック。

emms命令を使用して、MMX を使用した後に FPU スタックを空にすることができます。

于 2015-11-13T13:08:12.403 に答える