__asm ブロックでの演算子の使用

Microsoft 固有の仕様

__asm ブロックでは、<< 演算子などの C または C++ 固有の演算子を使用できません。 ただし、C および MASM で共有される演算子 (* 演算子など) は、アセンブリ言語演算子として解釈されます。 たとえば、__asm ブロックの外側では、角かっこ ([ ]) は配列の添字を囲んでいると解釈され、C では配列内の要素のサイズに自動的に拡大縮小されます。 __asm ブロックの内側では、MASM インデックス演算子と見なされ、(配列だけではなく) 任意のデータ オブジェクトまたはラベルからスケーリングされていないバイト オフセットが生成されます。 次のコードは、この違いを示しています。

int array[10];

__asm mov array[6], bx ;  Store BX at array+6 (not scaled)

array[6] = 0;         /* Store 0 at array+24 (scaled) */

array への最初の参照はスケーリングされませんが、2 番目の参照はスケーリングされます。 TYPE 演算子を使用すると、定数に基づいてスケーリングできることに注意してください。 たとえば、次のステートメントは互いに対応しています。

__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24

array[6] = 0;                   /* Store 0 at array + 24 */

Microsoft 固有の仕様はここまで

関連項目

__asm ブロックでの C または C++ の使用