在 __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 特定的