在 __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 专用