Inlineassembler-Übersicht
Microsoft-spezifisch
Der inline-Assembler ermöglicht es Ihnen, Assembly-Sprachanweisungen direkt in Ihre C- und C++-Quellprogramme einzubetten, ohne zusätzliche Assembly- oder Verknüpfungsschritte. Der inline-Assembler wird im Compiler erstellt — Sie benötigen keinen getrennten Assembler, wie den Microsoft Macro Assembler (MASM).
Da der Inlineassembler keine separaten Assembly und Linksschritte erfordert, ist er einfacher als ein separater Assembler. Inlineassemblycode kann jeden C- oder C++-Variablen- oder Funktionsnamen verwenden, der sich im Gültigkeitsbereich befindet, so ist es einfach, ihn mit C- und C++-Code Ihres Programms zu integrieren. Und da der Assemblycode mit C- und C++-Anweisungen kombiniert werden kann, kann er Aufgaben ausführen, die in C oder C++ alleine schwierig oder nicht unmöglich sind.
Das __asm-Schlüsselwort ruft den Inlineassembler auf und kann dort angezeigt werden, wo eine C- oder C++-Anweisung zulässig ist. Es kann nicht allein stehen. Ihm muss eine Assemblyanweisung, eine Gruppe von Anweisungen, die in geschweifte Klammern eingeschlossen sind, oder zumindest ein leeres Paar geschweifter Klammern folgen. Der Begriff "__asm-Block" bezieht sich hier auf eine beliebige Anweisung bzw. Gruppe von Anweisungen, unabhängig davon, ob in geschweifte Klammern gesetzt oder nicht.
Der folgende Code ist ein einfacher Block __asm, der von Klammern umschlossen ist. (Der Code ist eine Prologsequenz für eine benutzerdefinierte Funktion).
// asm_overview.cpp
// processor: x86
void __declspec(naked) main()
{
// Naked functions must provide their own prolog...
__asm {
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
}
// ... and epilog
__asm {
pop ebp
ret
}
}
Alternativ können Sie __asm vor jede Assemblyanweisung setzen:
__asm push ebp
__asm mov ebp, esp
__asm sub esp, __LOCAL_SIZE
Da das __asm-Schlüsselwort ein Trennzeichen für Anweisungen ist, können Sie auch Assemblyanweisungen in derselben Zeile einfügen:
__asm push ebp __asm mov ebp, esp __asm sub esp, __LOCAL_SIZE
END Microsoft-spezifisch