-1

次のコードがあります。

#include<iostream>
using namespace std;
int main() {
    int result=0;
    _asm {
         mov eax,2
         mov eax,result;
    }

    cout<<result<<endl;
    return 0;
}

私はアセンブリをよく知っていますが、プログラムが画面に 2 を出力しないのはなぜですか?

4

4 に答える 4

9

この行は間違っています:

 mov eax,result;

する必要があります

 mov result,eax;
于 2010-07-16T15:08:17.250 に答える
8

私はアセンブラを知りませんが、あなたはやっています:

mov eax,2;
mov eax,result;

2 を eax に移動してから、結果を eax に移動しませんか?

move eax, 2;
mov result, eax;

?

于 2010-07-16T15:08:55.837 に答える
3

C でアセンブリ コードを記述する前に、C で小さな関数にコードを記述し、コンパイラにアセンブリ リストを出力するように指示します。これにより、コンパイラがどのようにアセンブリ コードを生成したかがわかり、使用する例が示されます。通常、アセンブリ コードは、引数と戻り値がどのように渡されるかを示します。

私の経験では、アセンブリ コードはアセンブリ言語の別のモジュールに記述するのが最適です。C でアセンブリ コードを使用することはめったにありません。コンパイラにアセンブリ コードを生成させます。ときどき、私は強迫観念になり、特定のプロセッサ用に最適化するために関数を変換します。たとえばmemcpy、ARM プロセッサ用の特別な機能を使用するように最適化されたコードを書き直しました (コンパイラで提供される非効率的なバージョンを調べた後)。

提案:

  • アセンブリを記述する前にプロファイリングを優先します。
  • アセンブリに書き込む前に C または C++ コードを最適化します。
  • 絶対に必要な場合を除き、アセンブリに記述しないでください。
  • 独自のアセンブリ リストを作成する前に、コンパイラからアセンブリ リストを生成します。
  • アセンブリはプラットフォームに依存するため、別のファイルに入れます。
  • 多くの場合、アセンブリ コードの書き換えは、レガシ アセンブリのデバッグよりも高速です。
于 2010-07-16T16:39:16.877 に答える
2

正しい構文は次のとおりです。

MOV Destination, Source
于 2011-09-04T11:28:41.070 に答える