Udostępnij za pośrednictwem


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

Zobacz też

Informacje

Użycie języka C lub C++ w blokach __asm