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