Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft-spezifisch
Ein großer Vorteil der Inlineassembly ist die Möglichkeit, nach Namen auf C- oder C++-Variablen zu verweisen. Ein __asm Block kann auf alle Symbole, einschließlich Variablennamen, verweisen, die sich im Bereich befinden, in dem der Block angezeigt wird. Wenn sich beispielsweise die C-Variable var im Bereich befindet, wird die Anweisung
__asm mov eax, var
speichert den Wert von var in EAX.
Wenn ein Klassen-, Struktur- oder Union-Mitglied einen eindeutigen Namen hat, kann ein __asm Block nur mithilfe des Membernamens darauf verweisen, ohne die Variable oder typedef den Namen vor dem Periodenoperator (.) anzugeben. Wenn der Membername jedoch nicht eindeutig ist, müssen Sie eine Variable oder typedef einen Namen unmittelbar vor dem Periodenoperator platzieren. Die Strukturtypen in der folgenden Beispielfreigabe same_name werden beispielsweise als Membername verwendet:.
Wenn Sie Variablen mit den Typen deklarieren
struct first_type hal;
struct second_type oat;
Alle Verweise auf das Element same_name müssen den Variablennamen verwenden, da same_name er nicht eindeutig ist. Das Mitglied weasel hat jedoch einen eindeutigen Namen, sodass Sie nur mit seinem Membernamen darauf verweisen können:
// 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;
}
Beachten Sie, dass das Weglassen des Variablennamens lediglich eine Codierungsfreundlichkeit ist. Die gleichen Assemblyanweisungen werden generiert, unabhängig davon, ob der Variablename vorhanden ist.
Sie können ohne Zugriffsbeschränkungen auf Datenmitglieder in C++ zugreifen. Sie können jedoch keine Memberfunktionen aufrufen.
Ende Microsoft-spezifisch