Sdílet prostřednictvím


Přístup k datům jazyka C nebo C++ v blocích __asm

Specifické pro Microsoft

Velkou výhodou vložené sestavení je možnost odkazovat podle názvu proměnné C nebo C++.__asm Bloku může odkazovat na všechny symboly, včetně názvů proměnných, které jsou v oboru, kde se nachází bloku.Například pokud proměnné C var v oboru, instrukce

__asm mov eax, var

uloží hodnotu var v EAX.

Pokud třída, struktura nebo člen union má jedinečný název, __asm bloku může odkazovat pomocí pouze název člena bez zadání proměnné nebo typedef jméno před obdobím (.) operátor.Pokud není jedinečný název členu, ale je nutné umístit proměnné nebo typedef název bezprostředně před operátor období.Například typy struktury ve sdílené položce následující ukázkové same_name jako jejich jméno člena:.

Pokud deklarujete proměnné s typy

struct first_type hal;
struct second_type oat;

všechny odkazy na člen same_name musíte použít název proměnné, protože same_name není jedinečný.Ale člen weasel má jedinečný název, takže se můžete odkázat pomocí pouze jeho jméno člena:

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

Všimněte si, že vynechá název proměnné je pouze kódování pohodlí.Stejné pokyny sestavení jsou generovány, zda existuje název proměnné.

Dostanete datových členů v jazyce C++ bez ohledu na omezení přístupu.Však nelze volat členské funkce.

Specificka produktu Microsoft END

Viz také

Referenční dokumentace

Používání jazyka C nebo C++ v blocích __asm