Partilhar via


Acessando dados C ou C++ em blocos __asm

Específico da Microsoft

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

__asm mov eax, var

armazena o valor de var em EAX.

Se uma classe, uma estrutura, ou um sindicalista têm um nome exclusivo, um bloco de __asm pode se referir a ele usando apenas o nome do membro, sem especificar a variável ou o nome de typedef antes do operador de ponto (.). Se o nome de membro não for exclusivo, no entanto, você deve colocar uma variável ou um nome de typedef imediatamente antes do operador de tempo. Por exemplo, a estrutura no seguinte exemplo compartilhamento de same_name como seu nome de membro:.

Se você declare variáveis com os tipos

struct first_type hal;
struct second_type oat;

todas as referências ao membro same_name devem usar o nome de variável porque same_name não é exclusivo. Mas o membro weasel tem um nome exclusivo, assim você pode se referir a ele usando apenas o nome do 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 é meramente uma conveniência de codificação. As mesmas instruções de assembly são geradas se o nome da variável estiver presente.

Você pode acessar membros de dados em C++ sem relação com as restrições de acesso. Porém, você não pode chamar funções de membro.

FINALIZAR Específico da Microsoft

Consulte também

Referência

Usando C ou C++ em blocos __asm