__asm
Microsoft-spezifisch
Das Schlüsselwort __asm den Inlineassembler auf und kann, oder C++-Anweisung scheinen, wo eine gültig ist.Sie kann nicht allein angegeben werden.Er muss von einer Assemblyanweisung, einer Gruppe von Anweisungen, die in geschweifte Klammern eingeschlossen werden, oder allerwenigsten aus einem leeren Paar Klammern folgen.Der Begriff „Block“ bezieht sich auf eine beliebige Stelle__asm-Anweisung bzw. Gruppe von Anweisungen, ob in geschweifte Klammern an.
Hinweis |
---|
Visual C++-Unterstützung für das Standard-Schlüsselwort C++ asm wird dem Tatsache, dass der Compiler keinen Fehler auf dem Schlüsselwort generiert.Jedoch generiert ein asm-Blockade keinen sinnvollen Code.Verwenden Sie anstelle __asmasm. |
Syntax:
[ Assemblyanweisung __asm. ]
__asm { ASSEMBLY-AnweisungListe } [; ]
Grammatik
__asmassembly-instruction;opt
__asm {assembly-instruction-list};opt
ASSEMBLY-AnweisungListe:
assembly-instruction;optassembly-instruction;assembly-instruction-list;opt
Wenn es ohne geschweifte Klammern verwendet wird, bedeutet das __asm-Schlüsselwort, dass der Rest der Zeile Assemblersprachen einer Anweisung ist.Wenn es mit geschweiften Klammern verwendet wird, bedeutet dies, dass jede Zeile zwischen den geschweiften Klammern eine Assemblersprachen Anweisung ist.Aus Gründen der Kompatibilität mit früheren Versionen _asm ist ein Synonym für __asm.
Da das __asm-Anweisung als Trennzeichen ein Schlüsselwort ist, können Sie die Assemblyanweisungen auf dieselbe Zeile einfügen.
Vor Visual C++ 2005 die Anweisung
__asm int 3
systemeigenen Code wurde nicht generiert werden, als Kompilieren mit /clr. Der Compiler übersetzte die Anweisung auf eine CLR-Unterbrechungs Statement.
__asm int 3 führt jetzt systemeigene Codegenerierung für die Funktion.Wenn Sie eine Funktion einen Haltepunkt im Code auslösen soll und wenn Sie möchten, dass die Funktion in MSIL kompiliert, verwenden Sie __debugbreak.
Beispiel
Das folgende Codefragment ist ein einfacher __asm-Block, der in geschweifte Klammern eingeschlossen werden:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Alternativ können Sie __asm vor jeder Assemblyanweisung setzen:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Da das __asm-Schlüsselwort ein Trennzeichen ist, können Sie auch Assemblyanweisungen auf dieselbe Zeile einfügen:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Alle drei Beispielen wird derselbe Code, aber das erste Format (den __asm-Block in geschweiften Klammern einschließend) weist einige Vorteile.Die Klammern getrennt eindeutig Assemblycode von C- oder C++-Code angezeigt. Sie verhindern nicht benötigte Wiederholung des __asm-Schlüsselworts.Geschweifte Klammern Mehrdeutigkeiten können auch verhindern.Wenn Sie eine oder C++-Anweisung auf dieselbe Zeile wie ein __asm-Blocks einfügen möchten, müssen Sie den Block in geschweifte Klammern eingeschlossen werden.Ohne die geschweiften Klammern kann der Compiler nicht erkennen, wo Assemblycode anhält und C# oder C++-Anweisungen zu starten.Schließlich da der Text in geschweiften Klammern das gleiche Format wie gewöhnlicher MASM-Text verfügt, können Sie Text aus vorhandenen MASM-Quelldateien undschneiden und leicht überschreiten.
Im Gegensatz zu öffnenden geschweiften Klammern in C und C++ wirken sich auf die geschweiften Klammern, die einen __asm-Block einschließen, nicht variablen Bereich.Sie können __asm Blöcke auch schachteln. Schachtelung wirkt sich nicht auf variablen Bereich.
Microsoft ENDES bestimmten