インライン アセンブラーの概要
Microsoft 固有の仕様 →
インライン アセンブラーでは、追加のアセンブリとリンク ステップを使用せずに、アセンブリ言語命令を 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
END Microsoft 固有の仕様