インライン アセンブラーの概要
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 固有の仕様はここまで