9

私は現在、C++ コードと混合したアセンブリ コードを練習しています。次のコードが示すように、問題なく win32 プラットフォーム用の混合コードをコンパイルできます。

int main()
{

  char alphabet = 'X';
  printf ("Type letter = ");
  __asm
  {                               
       mov ah, 02
       mov dl, [alphabet]       
       int 21h                         
   }


  printf ("\n");
  return (0);
}

ただし、x64 プラットフォーム用に上記のコードをコンパイルしようとすると、失敗します。私が得たエラーメッセージは次のとおりです。

error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture

コンパイルに VC2010 を使用していますが、なぜ VC2010 がアセンブリ言語のコンパイルをサポートしていないのか、この状況でどうすればよいのか疑問に思っていました。ありがとう!

4

1 に答える 1

9

コンパイラは、64 ビット コードのインライン アセンブリをサポートしていません。

オプション:

  • アセンブリ コードを個別の .asm ファイルに記述し、それらをアセンブルして、プロジェクトの残りの部分と一緒にリンクする
  • プログラムにプリコンパイル済みのアセンブリ コードを配列のデータとして含めて実行します (アセンブリ コードが再配置可能であること、つまり、任意の場所に配置されたときに実行できることを確認する必要があります。配列の下のページのメモリ保護を実行可能に変更します)
  • 十分な場合は組み込み関数を使用する
  • アセンブリをまったく使用しない

前述のとおり、Windows プログラムで int 21h function 2 が機能する可能性はまったくありません。その API は、DOS プログラムでのみ使用できます。

于 2013-01-12T09:34:34.273 に答える