Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft-specifik
Nyckelordet __asm anropar den infogade assemblern och kan visas oavsett var en C- eller C++-instruktion är laglig. Det kan inte visas på egen hand. Den måste följas av en sammansättningsinstruktion, en grupp instruktioner som omges av klammerparenteser eller minst ett tomt par klammerparenteser. Termen "__asm block" här refererar till instruktioner eller grupper med instruktioner, oavsett om de finns i klammerparenteser eller inte.
Anmärkning
Det visuella C++-stödet för nyckelordet Standard C++ asm är begränsat till att kompilatorn inte genererar något fel på nyckelordet. Ett asm-block genererar dock ingen meningsfull kod. Använd __asm i stället för asm.
Grammatik
asm-block:
__asm
monteringsanvisning;välja
__asm {
assembly-instruction-list};välja
assembly-instruction-list:
monteringsanvisning;välja
monteringsanvisning;assembly-instruction-list;välja
Anmärkningar
Om det används utan klammerparenteser innebär nyckelordet __asm att resten av raden är en instruktion för sammansättningsspråk. Om den används med klammerparenteser innebär det att varje rad mellan klammerparenteserna är en instruktion för sammansättningsspråk. För kompatibilitet med tidigare versioner _asm är en synonym för __asm om inte kompilatoralternativet /Za (Inaktivera språktillägg) har angetts .
Eftersom nyckelordet __asm är en instruktionsavgränsare kan du placera sammansättningsinstruktioner på samma rad.
Före Visual Studio 2005 ska instruktionen
__asm int 3
orsakade inte att intern kod genererades när den kompilerades med /clr; kompilatorn översatte instruktionen till en CLR-brytinstruktion.
__asm int 3 resulterar nu i inbyggd kodgenerering för funktionen. Om du vill att en funktion ska orsaka en brytpunkt i koden och om du vill att den funktionen ska kompileras till MSIL, bör du använda __debugbreak.
Exempel
Följande kodfragment är ett enkelt __asm block omgivet av klammerparenteser:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Du kan också placera __asm framför varje monteringsinstruktion:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Eftersom nyckelordet __asm är en instruktionsavgränsare kan du också placera sammansättningsinstruktioner på samma rad:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Alla tre exemplen genererar samma kod, men det första formatet (omsluter __asm blocket i klammerparenteser) har vissa fördelar. Klammerparenteserna separerar tydligt sammansättningskoden från C- eller C++-koden och undviker onödig upprepning av nyckelordet __asm . Klammerparenteser kan också förhindra tvetydigheter. Om du vill placera en C- eller C++-instruktion på samma rad som ett __asm block måste du omsluta blocket i klammerparenteser. Utan klammerparenteserna kan kompilatorn inte avgöra var sammansättningskoden slutar och C- eller C++-instruktioner börjar. Eftersom texten i klammerparenteser har samma format som vanlig MASM-text kan du enkelt klippa ut och klistra in text från befintliga MASM-källfiler.
Till skillnad från klammerparenteser i C och C++ påverkar klammerparenteserna som omsluter ett __asm block inte variabelomfånget. Du kan också kapsla __asm-block; kapsling påverkar inte variabelomfånget.
Avsluta Microsoft Specifik