C++-Programmierung: Inline-Assembler

Aus Wikibooks
Alte Seite
Diese Seite gehört zum alten Teil des Buches und wird nicht mehr gewartet. Die Inhalte sollen in das neue Buch einfließen: C++-Programmierung/ Inhaltsverzeichnis.

C++ bietet die Möglichkeit, Assembler-Anweisungen direkt in den C++-Quellcode einzubauen. Wie dies passiert, ist compilerabhängig.

Die vom ISO-Standard vorgesehene Methode ist

asm("assembler code");

Diese Schreibweise wird jedoch nicht von allen Compilern unterstützt.

Bei vielen Compilern werden Assembler-Anweisungen stattdessen in asm-Blöcke geschrieben:

//C++-Code
asm {
   //Assembler-Code
}
//weiterer C++-Code

Anmerkung: Die öffnende geschwungene Klammer wurde bewusst direkt neben dem Schlüsselwort asm gesetzt, weil dies manche Compiler verlangen.

Obwohl diese Form nicht dem C++-Standard entspricht, ist sie weiter verbreitet als die vom Standard vorgesehene Version. Compilerunabhängig ist sie jedoch auch nicht; so unterstützt beispielsweise der GNU C++ Compiler diese Form nicht.

Auf diese Weise eingebundener Assembler-Code bietet die Möglichkeit, hardwarenahe Aufgaben, etwa der Umgang mit bestimmten Prozessor- oder Hardwareregistern, in einem C++-Programm zu erledigen.

Auch ist es mit Inline-Assembler gegebenenfalls möglich, weitergehende Optimierungen vorzunehmen, als dies der C++-Compiler tun würde.

Dabei verliert man, je nach Code, die Compiler- und Plattformunabhängigkeit seines Programms. Außerdem sind bei Inline-Assembler verschiedene weitere Dinge zu beachten, z. B. kein Aufruf von überladenen Funktionen innerhalb des Assemblercodes, Aufrufkonventionen und Parameterübergabe, vom Prozessor und Betriebssystem zugelassene Interrupts und vieles mehr. Auch unterstützt nicht jeder Compiler Inline-Assembler.

Es sollte daher grundsätzlich genau abgewogen werden, ob die Nachteile und Risiken den Einsatz von Inline-Assembler rechtfertigen und ob die erhofften Optimierungen überhaupt möglich sind (oder ob der Compiler von sich aus nicht bereits gleich guten oder besseren Maschinencode erzeugt).

Dieses Thema ist zu umfangreich, um es momentan in diesem Buch eingehend zu behandeln. Bitte konsultieren Sie die Dokumentation Ihres Compilers.

In Wikibooks gibt es ein Buch über Assembler-Programmierung für x86-Prozessoren.

Siehe auch Wikipedia-Inline-Assembler