Udostępnij za pośrednictwem


Używanie operatorów w blokach __asm

Specyficzne dla firmy Microsoft

Blok __asm nie może używać operatorów specyficznych dla języka C lub C++, takich jak << operator. Jednak operatory współużytkowane przez język C i MASM, takie jak operator *, są interpretowane jako operatory języka zestawów. Na przykład poza blokiem __asm nawiasy kwadratowe ([ ]) są interpretowane jako otaczające indeksy dolny tablicy, które C automatycznie skaluje do rozmiaru elementu w tablicy. __asm Wewnątrz bloku są one postrzegane jako operator indeksu MASM, który daje nieskalowane przesunięcie bajtów z dowolnego obiektu danych lub etykiety (nie tylko tablicy). 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 odwołanie do array nie jest skalowane, ale drugie. Należy pamiętać, że możesz użyć operatora TYPE , aby osiągnąć skalowanie na podstawie stałej. Na przykład następujące 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 */

END Microsoft Specific

Zobacz też

Korzystanie z C lub C++ w blokach __asm