Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Microsoft-specifikus
A beágyazott assembly nagy előnye, hogy név szerint lehet hivatkozni a C vagy C++ változókra. A __asm blokkok bármilyen szimbólumra hivatkozhatnak, beleértve a változóneveket is, amelyek hatókörében a blokk jelenik meg. Ha például a C változó var hatókörben van, az utasítás
__asm mov eax, var
az var értékét tárolja az EAX-ben.
Ha egy osztály, struktúra vagy unió- vagy tagváltozó egyedi névvel rendelkezik, egy __asm blokk csak a tagnév használatával hivatkozhat rá, anélkül, hogy a pont (typedef) operátor előtt megadná a változó vagy nevet. Ha azonban a tagnév nem egyedi, akkor egy változót vagy typedef nevet közvetlenül az időszak operátora elé kell helyeznie. Például a következő példában a same_name szereplő struktúratípusok tagnévként szerepelnek.
Ha változókat deklarál a típusokkal
struct first_type hal;
struct second_type oat;
A tagra same_name mutató összes hivatkozásnak a változó nevét kell használnia, mert same_name nem egyedi. A tagnak weasel azonban egyedi neve van, így csak a tag nevével hivatkozhat rá:
// 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;
}
Vegye figyelembe, hogy a változó nevének kihagyása csupán kódolási kényelem. A rendszer ugyanazokat az összeállítási utasításokat hozza létre, függetlenül attól, hogy a változó neve jelen van-e.
A C++-ban az adattagokat hozzáférési korlátozások nélkül érheti el. Tagfüggvényeket azonban nem hívhat meg.
END Microsoft-specifikus kifejezés