Sdílet prostřednictvím


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

Specifické pro Microsoft

Velkou pohodlí vloženého sestavení je schopnost odkazovat na proměnné jazyka C nebo C++ podle názvu. Blok __asm může odkazovat na všechny symboly, včetně názvů proměnných, které jsou v oboru, ve kterém se blok zobrazuje. Pokud je například proměnná jazyka var C v oboru, instrukce

__asm mov eax, var

uloží hodnotu var v EAX.

Pokud má třída, struktura nebo člen sjednocení jedinečný název, __asm blok na něj může odkazovat pouze pomocí názvu člena bez zadání proměnné nebo typedef názvu před operátorem tečky (.). Pokud však název člena není jedinečný, musíte proměnnou nebo typedef název umístit bezprostředně před operátor tečky. Například typy struktury v následující ukázkové sdílené složce same_name jako název člena:.

Pokud deklarujete proměnné s typy

struct first_type hal;
struct second_type oat;

všechny odkazy na člen same_name musí používat název proměnné, protože same_name není jedinečný. weasel Člen má ale jedinečný název, takže na něj můžete odkazovat pouze pomocí jeho názvu č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í názvu proměnné je pouze usnadnění kódování. Stejné pokyny k sestavení se generují bez ohledu na to, jestli se jedná o název proměnné.

K datovým členům v jazyce C++ můžete přistupovat bez ohledu na omezení přístupu. Členské funkce však nelze volat.

END Microsoft Specific

Viz také

Použití jazyka C nebo C++ v blocích __asm