インライン アセンブラーの概要

Microsoft 固有の仕様

インライン アセンブラーを使用すると、追加のアセンブリとリンク ステップを使用せずに、アセンブリ言語命令を C および C++ のソース プログラムに直接埋め込むことができます。 インライン アセンブラーは、コンパイラに組み込まれます。したがって、MASM (Microsoft Macro Assembler) などの別のアセンブラーは必要ではありません。

インライン アセンブラーは別のアセンブリとリンクの手順を必要としないので、別のアセンブラーより便利です。 インライン アセンブリ コードでは、スコープ内にある C または C++ 変数や関数名を使用できるので、プログラムの C および C++ コードと簡単に統合できます。 そして、アセンブリ コードは C および C++ のステートメントと混在させることができるため、C または C++ 単独では使いにくいタスクや不可能なタスクを行うことができます。

__asm キーワードは、インライン アセンブラーを呼び出し、C または C++ ステートメントが有効である任意の場所に使用できます。 これは、単独では使用できません。 アセンブリ命令、中かっこで囲まれた命令グループ、または少なくとも空の中かっこの後で指定する必要があります。 "__asm ブロック" という用語は、ここでは、中かっこに囲まれているかどうかを問わず、命令または命令のグループを示します。

次のコードは、中かっこで囲まれたシンプルな __asm ブロックです。 (コードは、カスタム関数プロローグ シーケンスです)。

// asm_overview.cpp
// processor: x86
void __declspec(naked) main()
{
    // Naked functions must provide their own prolog...
    __asm {
        push ebp
        mov ebp, esp
        sub esp, __LOCAL_SIZE
    }

    // ... and epilog
    __asm {
        pop ebp
        ret
    }
}

または、各アセンブリ命令の前に __asm を置くことができます。

__asm push ebp
__asm mov  ebp, esp
__asm sub  esp, __LOCAL_SIZE

__asm キーワードはステートメント区切り文字であるため、アセンブリ命令も同じ行に記述できます。

__asm push ebp   __asm mov  ebp, esp   __asm sub  esp, __LOCAL_SIZE

Microsoft 固有の仕様はここまで

関連項目

インライン アセンブラー