Partilhar via


Acessando c ou C++ dados em blocos de __asm

Específicos do Microsoft

Uma grande conveniência de assembly embutido é a capacidade para se referir a variáveis c ou C++ por nome.Um __asm bloco pode se referir a símbolos, incluindo nomes de variáveis que estão no escopo em que o bloco é exibida.Por exemplo, se a variável c var está no escopo, a instrução

__asm mov eax, var

armazena o valor da var em EAX.

Se uma classe, estrutura ou membro da união tem um nome exclusivo, um __asm bloco pode se referir a ele usando apenas o nome do membro, sem especificar a variável ou typedef nome antes do período (.) operador.Se o nome do membro não é exclusivo, no entanto, você deve colocar uma variável ou typedef nome imediatamente antes do operador de período.Por exemplo, os tipos de estrutura no compartilhamento de exemplo a seguir same_name como seu nome de membro:.

Se você declarar variáveis com os tipos de

struct first_type hal;
struct second_type oat;

todas as referências para o membro same_name deve usar o nome da variável porque same_name não é exclusivo.Mas o membro weasel tem um nome exclusivo, para que possa consultá-lo usando seu nome de 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;
}

Observe que, omitir o nome da variável é apenas uma conveniência de codificação.As mesmas instruções assembly são geradas se o nome da variável está presente ou não.

Você pode acessar membros de dados em C++ sem considerar a restrições de acesso.No entanto, você não pode chamar membros funções.

Específicos do Microsoft final

Consulte também

Referência

Usando c ou C++ em blocos de __asm