インライン・アセンブリー

Microsoft* スタイルのインライン・アセンブリー

インテル(R) C++ コンパイラーは、-use-msasm オプションにより Microsoft スタイルのインライン・アセンブリーをサポートしています。構文については、Microsoft のマニュアルを参照してください。

GNU スタイルのインライン・アセンブリー (IA-32 アーキテクチャーおよびインテル(R) 64 アーキテクチャーのみ)

インテル C++ コンパイラーは、GNU* スタイルのインライン・アセンブリーをサポートします。構文は、次のとおりです。

asm-keyword [ volatile-keyword ] ( asm-template [ asm-interface ] ) ;

インテル C++ コンパイラーは、アセンブラー・コードが AT&T* System V/386 構文を使用する場合、gcc スタイルのインライン・アセンブリーをサポートします。

警告

インテル C++ コンパイラーは、UNIX スタイルの asm と Microsoft スタイルの asm の混在をサポートしていません。

構文要素 説明
asm-keyword asm 文は asm キーワードで始まります。または、互換性のために __asm あるいは __asm__ が使用されることもあります。「警告」を参照してください。
volatile-keyword オプションの volatile キーワードが指定されたら、asm は volatile です。2 つの volatile asm 文は、お互いに移動しません。volatile 変数への参照は、volatile asm へ相対移動しません。または、互換性のため、__volatile もしくは __volatile__ が使用されることもあります。
asm-template asm-template は、アセンブリー・コードを出力する方法を指定する C 言語の ASCII 文字列です。テンプレートの多くは固定文字列です。代入宣言子以外はすべて、アセンブリーにそのまま渡されます。代入宣言子の構文は、% の後に 1 または 2 文字続きます。
asm-interface asm-interface は次の 3 つの部分で構成されます。
1. output-list (オプション)
2. input-list (オプション)
3. clobber-list (オプション)
これらは、コロン (:) で区切ります。output-list がなく、input-list が指定される場合、output-list の代わりに、input-list は 2 つのコロン (::) の後に指定します。asm-interface がすべて省略された場合、volatile-keyword の指定の有無にかかわらず、asm 文は volatile とみなされます。
output-list output-list は、カンマで区切られた 1 つ以上の output-specs から構成されます。asm-template に代入するため、各 output-spec には番号が付けられます。output-list の最初のオペランドは 0 で、次は 1 のようになります。番号付けは、output-list から input-list へ続行します。オペランドの合計数は 0-29 個です。
input-list output-list と同様、input-list はカンマで区切られた 1 つ以上の input-specs から構成されます。asm-template に代入するため、各 input-spec には番号が付けられます。番号は、output-list のオペランドから続きます。
clobber-list clobber-listasm が特定のマシンレジスターを使用または変更することをコンパイラーに伝えます。特定のマシンレジスターは直接 asm にコードされるか、アセンブリーの命令によって暗黙的に変更されます。clobber-list は、カンマで区切られた clobber-specs のリストです。
input-spec input-specs は、挿入されたアセンブリーの命令によって必要とされる値の式をコンパイラーに伝えます。asm の必須入力をすべて示すのに、実際には asm-template に参照されない input-spec を一覧表示できます。
clobber-spec clobber-spec は、壊れた 1 つのマシンレジスター名を指定します。レジスター名は、オプションで先頭に % を使用できます。任意の有効なマシンレジスターを指定することができます。また、clobber-spec で "メモリー" を指定することもできます。これを指定すると、コンパイラーはレジスターにキャッシュされたデータを asm 文に渡さないようにします。