在 __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 的第一个引用,但缩放第二个引用。 请注意,你可以使用 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++