Używanie operatorów w blokach __asm
Specyficzne dla firmy Microsoft
__asm Bloku nie można używać C lub C++ szczególnych operatorów, takich jak << operatora.Jednakże podmioty gospodarcze wspólnie przez C i MASM, takie jak * operatora, są interpretowane jako operatory języka asemblera.Na przykład, poza __asm blok, nawiasy kwadratowe ([]) są interpretowane jako załączając dolne tablicy, które C automatycznie skaluje się do rozmiaru elementu w tablicy.Wewnątrz __asm bloku, są one postrzegane jako operator indeksu MASM, która daje w wyniku nieskalowanej bajtach przesunięcie od dowolnego obiektu danych lub etykiety (nie tylko tablicą).Poniższy kod ilustruje różnicę:
int array[10];
__asm mov array[6], bx ; Store BX at array+6 (not scaled)
array[6] = 0; /* Store 0 at array+24 (scaled) */
Pierwsze odniesienie do array nie jest skalowany, ale jest drugi.Należy zauważyć, że można użyć typu na stałej podstawie operatorowi osiągnięcia skalowania.Na przykład poniższe instrukcje są równoważne:
__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24
array[6] = 0; /* Store 0 at array + 24 */
KONIEC informacji specyficznych dla firmy Microsoft