Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Microsoft-specifieke
Een groot gemak van inline-assembly is de mogelijkheid om te verwijzen naar C- of C++-variabelen op naam. Een __asm blok kan verwijzen naar alle symbolen, inclusief namen van variabelen, die binnen het bereik vallen waar het blok wordt weergegeven. Als de C-variabele var bijvoorbeeld binnen het bereik valt, wordt de instructie
__asm mov eax, var
slaat de waarde van var in EAX.
Als een klasse, structuur of union-lid een unieke naam heeft, kan een __asm blok ernaar verwijzen met alleen de lidnaam, zonder de variabele of typedef naam op te geven vóór de puntoperator (.). Als de lidnaam echter niet uniek is, moet u een variabele of typedef naam direct voor de puntoperator plaatsen. Bijvoorbeeld, de structuurtypen in het volgende voorbeeld delen same_name als hun lidnaam.
Als u variabelen declareert met de typen
struct first_type hal;
struct second_type oat;
alle verwijzingen naar het lid same_name moeten de naam van de variabele gebruiken, omdat same_name deze niet uniek is. Maar het lid weasel heeft een unieke naam, zodat u ernaar kunt verwijzen met alleen de naam van het lid:
// 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;
}
Houd er rekening mee dat het weglaten van de naam van de variabele slechts een coderings gemak is. Dezelfde assembly-instructies worden gegenereerd, ongeacht of de naam van de variabele aanwezig is.
U kunt toegang krijgen tot gegevensleden in C++ zonder rekening te houden met toegangsbeperkingen. U kunt echter geen lidfuncties aanroepen.
Microsoft-specifieke beëindigen