Udostępnij za pośrednictwem


Uzyskiwanie dostępu do danych C lub C++ w blokach __asm

Specyficzne dla firmy Microsoft

Dużą wygodę wbudowanego zestawu jest możliwość odwołania do zmiennych C lub C++ według nazwy.__asm Blok może odnosić się do żadnego symbolu, w tym nazwy zmiennych, które są w zakresie, w którym pojawia się bloku.Na przykład jeżeli zmienna C var jest w zasięgu, instrukcja

__asm mov eax, var

przechowuje wartość var w EAX.

Jeśli klasy, struktury lub członek ma unikatową nazwę, __asm blok może odwoływać się do niego przy użyciu tylko nazwę składnika, bez określania zmiennej lub typedef nazwa przed okresem (.) operator.Jeśli nazwa elementu członkowskiego nie jest unikatowy, jednak należy umieścić zmienną lub typedef nazwa bezpośrednio przed okresu operatora.Na przykład typy struktury następujące udziału próbki w same_name jako ich nazwa elementu członkowskiego:.

Przy deklarowaniu zmiennych z typami

struct first_type hal;
struct second_type oat;

wszystkie odwołania do elementu same_name należy użyć nazwy zmiennej, ponieważ same_name nie jest unikatowa.Ale członka weasel ma unikatową nazwę, więc możesz się do niego przy użyciu jego nazwy Państwa:

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

Należy zauważyć, że pominięcie nazwy zmiennej jest jedynie udogodnieniem kodowania.Te same instrukcje montażu są generowane, czy nazwa zmiennej jest obecny.

Zmienne składowe języka C++ nie biorąc pod uwagę ograniczenia dostępu są dostępne.Członek nie może jednak wywołanie funkcji.

KONIEC informacji specyficznych dla firmy Microsoft

Zobacz też

Informacje

Użycie języka C lub C++ w blokach __asm