5

Linux アプリケーションを Windows プラットフォームに移植しています。

これがLinuxコードです。

 __asm__ __volatile__ ("lock; cmpxchgl %1, %2"
                      : "=a" (prev)
                      : "q" (new_value), "m" (*ptr), "0" (old_value)
                     : "memory");

_asm volatile を使用してみましたが、Visual Studio 2012 で「'opcode' のインライン アセンブラー構文エラーです。'data type' が見つかりました」というエラーが表示されます。

Windowsに相当するコードが必要です。情報/提案をお願いします。

4

2 に答える 2

1

一般的に、私はインライン アセンブリよりも外部アセンブリ モジュールを好みます。より移植性があります (そうです、移植性とアセンブリは同じ文で使用されます)。nasmyasmなどのアセンブラは、複数のプラットフォームで使用でき、複数のオブジェクト ファイル形式を生成できます。

外部アセンブリ モジュールは、コードのようなパフォーマンスが非常に重要なワンライナーには適していません。インライン アセンブリの代わりにコンパイラ組み込み関数を使用することを検討してください。Portable Compare And Swapをチェックしてみてください。

于 2012-06-13T08:26:42.080 に答える
0

ここでの主な問題は、Visual Studio が使用していない Intel スタイルのインライン アセンブリ言語を使用していることだと思います。

これをチェックしてください: http://msdn.microsoft.com/en-us/library/4ks26t93%28v=vs.80%29.aspx

volatile 指定子と並べ替えに関しては、o2 最適化を使用しても、VS 2010 または 2012 で __asm ブロックの並べ替えをまだ見たことがありません。

こんにちは、アンディ

于 2012-11-07T14:08:22.850 に答える