Partager via


C de données accès ou C++ dans les blocs de __asm

Spécifique à Microsoft

Une grande facilité de l'assembly inline est la possibilité de faire référence à des variables C ou C++ de nom.Un bloc d' __asm peut faire référence à tous les symboles, y compris les noms de variables, qui sont dans la portée où le bloc s'affiche.Par exemple, si C' var variable est dans la portée, l'instruction

__asm mov eax, var

stocke la valeur d' var dans EAX.

Si une classe, une structure, ou d'union a un nom unique, un bloc d' __asm peut faire référence à celui-ci en utilisant seulement le nom de membre, sans spécifier la variable ou le nom d' typedef avant l'opérateur point (.).Si le nom de membre n'est pas unique, toutefois, vous devez placer une variable ou un nom d' typedef immédiatement avant l'opérateur point.Par exemple, la structure dans le partage suivant same_name exemple comme leur nom de membre :.

Si vous déclarez des variables avec des types

struct first_type hal;
struct second_type oat;

toutes les références au membre same_name doivent utiliser le nom de variable parce qu' same_name n'est pas unique.Mais weasel membre a un nom unique, vous pouvez faire référence à celui-ci en utilisant uniquement son membre :

// 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;
}

Notez que qui omet le nom de variable est simplement pratique de programmation.Les mêmes instructions assembleur sont générées si le nom de variable est présent.

Vous pouvez accéder aux données membres en C++ sans tenir compte des restrictions d'accès.Toutefois, vous ne pouvez pas appeler les fonctions membres.

détail de FIN Microsoft

Voir aussi

Référence

En C ou C++ dans les blocs de __asm