Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Específico da Microsoft
Uma grande conveniência da montagem em linha é a capacidade de se referir a variáveis C ou C++ pelo nome. Um __asm bloco pode referir-se a quaisquer símbolos, incluindo nomes de variáveis, que estejam no âmbito onde o bloco aparece. Por exemplo, se a variável var C estiver no escopo, a instrução
__asm mov eax, var
armazena o valor de var em EAX.
Se uma classe, estrutura ou membro da união tiver um nome exclusivo, um bloco __asm pode referir-se a ele usando apenas o nome do membro, sem especificar o nome da variável ou do typedef antes do operador de ponto (.). Se o nome do membro não for 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 exemplo a seguir compartilham same_name como seu nome de membro:.
Se você declarar 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 da variável porque same_name não é exclusivo. Mas o membro weasel tem um nome exclusivo, então você pode se referir a ele usando apenas 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 é meramente uma conveniência de codificação. As mesmas instruções de montagem são geradas independentemente de o nome da variável estar presente ou não.
Você pode acessar membros de dados em C++ sem considerar as restrições de acesso. No entanto, você não pode chamar funções de membro.
END Específico da Microsoft