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