Utilizzo degli operatori in blocchi __asm
Sezione specifica Microsoft
Un __asm
blocco non può usare operatori specifici C o C++, ad esempio l'operatore << . Tuttavia, gli operatori condivisi da C e MASM, ad esempio l'operatore * , vengono interpretati come operatori del linguaggio assembly. Ad esempio, all'esterno di un __asm
blocco, le parentesi quadre ([ ]) vengono interpretate come pedice di matrice che C ridimensiona automaticamente le dimensioni di un elemento nella matrice. All'interno di un blocco __asm
, vengono interpretate come operatore di indice di MASM, il che genera un offset dei byte non ridimensionato da qualsiasi oggetto dati o etichetta (non solo da una matrice). Nel codice riportato di seguito viene illustrata la differenza:
int array[10];
__asm mov array[6], bx ; Store BX at array+6 (not scaled)
array[6] = 0; /* Store 0 at array+24 (scaled) */
Il primo riferimento a array
non è ridimensionato, mentre il secondo lo è. Si noti che è possibile usare l'operatore TYPE per ottenere il ridimensionamento in base a una costante. Ad esempio, le istruzioni seguenti sono equivalenti:
__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24
array[6] = 0; /* Store 0 at array + 24 */
Fine sezione specifica Microsoft