次の方法で共有


__asm

Microsoft 固有の仕様 →

__asm のキーワードはインライン アセンブラーを起動してC. または C++ のステートメントを実行できる場所ならどこでも指定できます。これは単独では使用できません。これは命令のアセンブリ命令中かっこで囲まれた少なくともグループ空のかっこのペアを指定する必要があります。用語 __asm 「ブロック」ここについての命令またはグループを中かっこでかどうかを示します。

[!メモ]

標準 C++ asm のキーワードの Visual C++ ではコンパイラがキーワードでエラーが生成されないということだけです。ただしasm ブロックで有効なコードを生成しません。asm の代わりに __asm を使用します。

構文 :

__asm アセンブリ命令 [; 入力]

[ アセンブリ命令リスト __asm {}; 入力]

文法

  • __asmassembly-instruction;opt

    __asm {assembly-instruction-list};opt

  • アセンブリ命令リスト :
    assembly-instruction;opt

    assembly-instruction;assembly-instruction-list;opt

指定した場合中かっこがない場合__asm のキーワードは行の残りがアセンブリ言語のステートメントです。中かっことして使用する場合中かっこ内の各行がアセンブリ言語のステートメントです。以前のバージョンとの互換性のために_asm は __asm のシノニムです。

__asm のキーワードがステートメントの区分線であるためアセンブリ命令を同じ行に配置できます。

Visual C++ 2005 以前では手順

__asm int 3

/clr してコンパイルするとネイティブ コードは生成されませんでした ; コンパイラはCLR 命令を中断命令に変換されます。

__asm int 3 は関数のネイティブ コードの生成に表示されます。関数を MSIL にコンパイルする関数はコードにブレークポイントが発生すると __debugbreak 場合はを使用します。

使用例

次のコードは中かっこで囲まれた __asm の単純なブロックです :

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

また各アセンブリ命令の前の __asm を配置できます :

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

__asm のキーワードがステートメントの区分線であるため同じ行または命令にアセンブリを配置する :

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

3 例はすべて同じコードを生成しますが最初のスタイルの中かっこ (__asm ブロックを囲む) いくつかの利点があります。明確に中かっこ 15 ので C または C++ コードから別のアセンブリのコードではおよび __asm 不要なキーワードの繰り返しを回避できます。中かっこはあいまいな参照を回避できます。__asm のブロックと同様に C または C++. 行のステートメントを含める場合はブロックを中かっこで囲む必要があります。中かっこがあるとコンパイラはアセンブリ コードおよび C または C++ のステートメントの開始位置を示すことはできません。最後に中かっこのテキストは通常MASM のテキストと同じ書式があるため簡単に既存の MASM のソース ファイルからテキストをコピーして貼り付けることもできます。

C および C++ の中かっことは異なり__asm ブロックを囲む中かっこは変数のスコープには影響しません。または __asm ブロックを入れ子にすることができます。; 入れ子は変数のスコープには影響しません。

終了 Microsoft 固有の仕様→

参照

関連項目

C++ のキーワード

インライン アセンブラー