在 __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 */
END Microsoft 特定的