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
Het __asm
trefwoord roept de inlineassembly aan en kan worden weergegeven waar een C- of C++-instructie legaal is. Het kan niet uit zichzelf verschijnen. Het moet worden gevolgd door een montage-instructie, een groep instructies tussen accolades, of, minimaal, een leeg paar accolades. De term '__asm
blok' verwijst hier naar een instructie of groep instructies, ongeacht of deze al dan niet in accolades staat.
Opmerking
Visual C++ ondersteuning voor het trefwoord Standard C++ asm
is beperkt tot het feit dat de compiler geen fout op het trefwoord genereert.
asm
Een blok genereert echter geen zinvolle code. Gebruik __asm
in plaats van asm
.
Grammatica
asm-block:
__asm
assembly-instructie;
opt
__asm {
assembly-instruction-list}
;
optie
assembly-instruction-list:
assembly-instructie;
optioneel
assembly-instructie;
assembly-instructie-lijst;
opt
Opmerkingen
Als er geen accolades worden gebruikt, betekent het __asm
trefwoord dat de rest van de regel een assemblytaalinstructie is. Als deze wordt gebruikt met accolades, betekent dit dat elke regel tussen de accolades een assemblytaal-instructie is. Voor compatibiliteit met eerdere versies _asm
is dit een synoniem voor __asm
.
Omdat het __asm
trefwoord een scheidingsteken voor instructies is, kunt u assembly-instructies op dezelfde regel plaatsen.
Vóór Visual Studio 2005 was de instructie als volgt:
__asm int 3
heeft niet tot gevolg dat systeemeigen code wordt gegenereerd wanneer deze wordt gecompileerd met /clr; de compiler heeft de instructie vertaald naar een CLR-onderbrekingsinstructie.
__asm int 3
resulteert nu in systeemeigen codegeneratie voor de functie. Als u wilt dat een functie een onderbrekingspunt in uw code veroorzaakt en als u wilt dat die functie is gecompileerd naar MSIL, gebruikt u __debugbreak.
Voor compatibiliteit met eerdere versies _asm
is dit een synoniem voor __asm
tenzij compileroptie /Za (taalextensies uitschakelen) is opgegeven.
Voorbeeld
Het volgende codefragment is een eenvoudig __asm
blok tussen accolades:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
U kunt ook voor elke assembly-instructie plaatsen __asm
:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Omdat het __asm
trefwoord een scheidingsteken voor instructies is, kunt u ook assembly-instructies op dezelfde regel plaatsen:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Alle drie de voorbeelden genereren dezelfde code, maar de eerste stijl (tussen het __asm
blok in accolades) heeft enkele voordelen. De accolades scheiden duidelijk assemblycode van C- of C++-code en voorkomen onnodige herhaling van het __asm
trefwoord. Accolades kunnen ook dubbelzinnigheden voorkomen. Als u een C- of C++-instructie op dezelfde regel als een __asm
blok wilt plaatsen, moet u het blok tussen accolades plaatsen. Zonder de accolades kan de compiler niet zien waar assemblycode stopt en C- of C++-instructies beginnen. Ten slotte, omdat de tekst in accolades dezelfde indeling heeft als gewone MASM-tekst, kunt u eenvoudig tekst knippen en plakken uit bestaande MASM-bronbestanden.
In tegenstelling tot accolades in C en C++ hebben de accolades die een __asm
blok omsluiten geen invloed op het bereik van variabelen. U kunt ook __asm
-blokken nesten, nesten heeft geen invloed op het bereik van variabelen.
Microsoft-specifieke beëindigen