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