Freigeben über


__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.

HinweisHinweis

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;opt

    assembly-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

Siehe auch

Referenz

C++-Schlüsselwörter

Inlineassembler