Delen via


Operatoren gebruiken in __asm-blokken

Microsoft-specifieke

Een __asm blok kan geen specifieke C- of C++-operatoren gebruiken, zoals de << operator. Operators die worden gedeeld door C en MASM, zoals de operator *, worden echter geïnterpreteerd als operators in assemblytaal. Buiten een __asm blok worden vierkante haken ([ ]) bijvoorbeeld geïnterpreteerd als het insluiten van matrixsubscripts, die door C automatisch worden geschaald naar de grootte van een element in de matrix. Binnen een __asm blok worden ze gezien als de MASM-indexoperator, wat een ongeschaalde byte-offset oplevert van iedere gegevensobject of label (niet alleen een array). De volgende code illustreert het verschil:

int array[10];

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

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

De eerste verwijzing naar array is niet geschaald, maar de tweede wel. Houd er rekening mee dat u de operator TYPE kunt gebruiken om te schalen op basis van een constante. De volgende instructies zijn bijvoorbeeld gelijkwaardig:

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

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

Microsoft-specifieke beëindigen

Zie ook

Gebruik van C of C++ in __asm-blokken