Megosztás:


Operátorok használata __asm blokkokban

Microsoft-specifikus

A __asm blokkok nem használhatnak C vagy C++ típusú operátorokat, például az operátort << . A C és a MASM által megosztott operátorokat, például a * operátort azonban a rendszer szerelvénynyelvi operátorként értelmezi. Külső blokkok esetén a szögletes zárójelek (__asm) tömbindexekként vannak értelmezve, amelyeket a C automatikusan a tömb elemeinek méretére skáláz. __asm blokkban a MASM-index operátorának tekintik őket, amely méretezés nélküli bájt eltolást eredményez bármilyen adatobjektumból vagy címkéből (nem csak tömbből). Az alábbi kód a különbséget szemlélteti:

int array[10];

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

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

Az első hivatkozás array nincs skálázva, de a második igen. Vegye figyelembe, hogy a TYPE operátorral konstans alapján végezhet skálázást. A következő utasítások például egyenértékűek:

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

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

END Microsoft-specifikus kifejezés

Lásd még

C vagy C++ használata __asm blokkokban