__asm
Specifici di Microsoft
__asm la parola chiave richiama l'assembler inline e può sembrare ovunque a-c l'istruzione o C++ sia valido.Non può essere utilizzata da sola.Deve essere seguita da un'istruzione di assembly, da un gruppo di istruzioni racchiuse tra parentesi graffe, o, per lo meno, da una coppia di parentesi vuote graffe.il termine “__asm il blocco„ qui si riferisce a qualsiasi istruzione o gruppo di istruzioni, indipendentemente dal fatto che in parentesi graffe.
[!NOTA]
Supporto Visual C++ per lo standard C++ asm la parola chiave è limitata al fatto che il compilatore non genererà un errore sulla parola chiave.tuttavia, asm il blocco non genererà alcun codice significativo.utilizzo __asmanziché asm.
sintassi:
__asm assembly-istruzione [; ]
__asm { assembly-istruzione-elenco } [; ]
Grammatica
__asmassembly-instruction;scegliere
__asm {assembly-instruction-list};scegliere
assembly-istruzione-elenco:
assembly-instruction;scegliereassembly-instruction;assembly-instruction-list;scegliere
se utilizzato senza parentesi graffe, __asm la parola chiave indica che il resto della riga è un'istruzione in linguaggio assembly.Se utilizzato con le parentesi graffe, significa che ogni riga tra le parentesi graffe è un'istruzione in linguaggio assembly.Per garantire la compatibilità con le versioni precedenti, _asm è sinonimo di __asm.
Da __asm la parola chiave è un separatore di un'istruzione, è possibile inserire le istruzioni di assembly sulla stessa riga.
prima di Visual C++ 2005, l'istruzione
__asm int 3
non ha causato il codice nativo venga generato una volta compilato con /clr; il compilatore è stata convertita l'istruzione a un'istruzione di CLR.
__asm int 3 ora risultati nella generazione di codice nativo per la funzione.Se si desidera una funzione per generare un punto di interruzione nel codice e se si desidera che la funzione compilata in codice MSIL, utilizzare __debugbreak.
Esempio
Nel frammento di codice è un semplice __asm blocco racchiusi tra parentesi:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
In alternativa, è possibile inserire __asm davanti a ogni istruzione di assembly:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Poiché __asm la parola chiave è un separatore di un'istruzione, è anche possibile inserire le istruzioni di assembly sulla stessa riga:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Tutti e tre gli esempi generano lo stesso codice, ma il primo stile (racchiudere __asm il blocco tra parentesi graffe) presenta alcuni vantaggi.Il codice assembly nettamente separato delle parentesi graffe dal codice C o C++ ed evita la ripetizione non necessario di __asm parola chiave.Le parentesi graffe può essere impedita anche le ambiguità.Se si desidera inserire a-c l'istruzione o C++ nella stessa riga come __asm blocco, è necessario racchiudere il blocco tra parentesi graffe.Senza le parentesi graffe, il compilatore non è in grado di riconoscere in cui il codice assembly verrà interrotto e istruzioni C++ o c# verrà avviato.Infine, poiché il testo in parentesi graffe ha lo stesso formato del testo di normale MASM, è possibile facilmente testo di taglia e incolla dai file di origine esistenti di MASM.
A differenza delle parentesi graffe in C# e in C++, viene racchiuso tra parentesi graffe __asm il blocco non ha effetto sull'ambito variabile.È inoltre possibile annidare __asm blocchi, annidamento non ha effetto sull'ambito variabile.
Microsoft FINALE specifico