Condividi tramite


Accedere a C o i dati C++ in blocchi di __asm

Specifici di Microsoft

Una maggiore praticità di assembly inline è la possibilità di fare riferimento alle variabili C++ o c# per nome.__asm il blocco può fare riferimento a tutti i simboli, inclusi i nomi di variabile, che sono inclusi in cui il blocco viene visualizzato.Ad esempio, se la variabile c# var nell'ambito, l'istruzione

__asm mov eax, var

archivia il valore di var in EAX.

Se una classe, una struttura, o unione ha un nome univoco, __asm il blocco può fare riferimento utilizzando solo il nome del membro, senza specificare la variabile o typedef nome prima del punto (**.**operatore).Se il nome del membro non è univoco, tuttavia, è necessario inserire una variabile o typedef nome immediatamente prima dell'operatore punto.Ad esempio, struttura nella seguente condivisione di esempio same_name come il nome del membro:.

Se si dichiarano variabili con i tipi

struct first_type hal;
struct second_type oat;

tutti i riferimenti al membro same_name è necessario utilizzare il nome della variabile perché same_name non è univoco.ma il membro weasel dispone di un nome univoco, in modo che sia possibile farvi riferimento utilizzando solo il nome del membro:

// InlineAssembler_Accessing_C_asm_Blocks.cpp
// processor: x86
#include <stdio.h>
struct first_type
{
   char *weasel;
   int same_name;
};

struct second_type
{
   int wonton;
   long same_name;
};

int main()
{
   struct first_type hal;
   struct second_type oat;

   __asm
   {
      lea ebx, hal
      mov ecx, [ebx]hal.same_name ; Must use 'hal'
      mov esi, [ebx].weasel       ; Can omit 'hal'
   }
   return 0;
}

Si noti che omette il nome della variabile è solo una comoda di codifica.Le stesse istruzioni in linguaggio assembly vengono generate se il nome della variabile è presente.

È possibile accedere ai membri dati in C++ indipendentemente dalle restrizioni di accesso.Tuttavia, non è possibile chiamare le funzioni membro.

Microsoft FINALE specifico

Vedere anche

Riferimenti

Utilizzando c o C++ in blocchi di __asm