Dela via


Använda operatorer i __asm-block

Microsoft-specifik

Ett __asm block kan inte använda C- eller C++-specifika operatorer, till exempel operatorn << . Operatorer som delas av C och MASM, till exempel *-operatorn, tolkas dock som monteringsspråkoperatorer. Utanför ett __asm block tolkas till exempel hakparenteser ([ ]) som omslutna matrisunderskrifter, som C automatiskt skalar till storleken på ett element i matrisen. I ett __asm block ses de som MASM-indexoperator, vilket ger en oskalad byteförskjutning från alla dataobjekt eller etiketter (inte bara en matris). Följande kod illustrerar skillnaden:

int array[10];

__asm mov array[6], bx ;  Store BX at array+6 (not scaled)

array[6] = 0;         /* Store 0 at array+24 (scaled) */

Den första referensen till array skalas inte, men den andra är. Observera att du kan använda type-operatorn för att uppnå skalning baserat på en konstant. Till exempel är följande uttalanden likvärdiga:

__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24

array[6] = 0;                   /* Store 0 at array + 24 */

Avsluta Microsoft Specifik

Se även

Använda C eller C++ i __asm block