www.wikidata.de-de.nina.az
Inline Assembler oder auch integrierter Assemblercode wird ein in Assemblersprache geschriebener Programmteil genannt der im Quelltext einer hoheren Programmiersprache integriert ist Die Einbettung des Assembler Codeteils wird mittels spezieller Anweisungen deklariert z B beginnend mit asm asm oder asm sowie ggf mit weiteren Angaben und dadurch dem Compiler bekanntgegeben Inhaltsverzeichnis 1 Verwendung 2 Beispiel x86 3 Liste der Compiler mit Inline Assembler Unterstutzung 4 Weblinks 5 EinzelnachweiseVerwendung BearbeitenViele Compiler gehen beim Kompilieren ihrer Hochsprache sowieso den Weg uber Assembler Quelltext Dabei kann der Inline Assembler Quelltext direkt vom Compiler ubernommen werden Vorteile sind dass man Programmteile in Assembler schreiben kann anstatt ganzer Funktionen wie im Falle der Integration uber den Linker dass direkter Zugriff auf die Symbole und Variablen der Hochsprache moglich ist und dass umgekehrt auch der Compiler den Assembler Code sieht und bei seiner Optimierung berucksichtigen kann Beim GNU Assembler z B wird die Kommunikation zwischen Hochsprachcodeteil und Assemblercodeteil uber ein Assembler Template ermoglicht Es definiert die Abbildung von Ein und Ausgabevariablen aus der Hochsprache auf Assembler zugreifbare Register wie auch sonst im Assemblerteil verwendete Register Clobber List die dem Hochsprachcompiler bekannt gemacht werden 1 In der alternativ ublichen Variante Assembler Codeteile in Hochsprachenprogrammen zu verwenden werden Programmteile als Maschinencode aus ggf unterschiedlichen Sprachen auf der binaren Linkerebene verbunden und uber die Funktionsschnittstelle aufgerufen Vorteil ist dass kein Compilersupport dafur notwendig ist Nachteile sind die zwischen Betriebssystemen variierenden Calling Conventions die die Portierbarkeit erschweren sowie der zusatzliche Befehlsoverhead durch den Funktionsaufruf Diese Probleme treten bei der Nutzung von Inline Assembler nicht auf Die neueste Variante ist die Verwendung sogenannter Assembler Intrinsics effektiv Makros die die Assemblersyntax verstecken die die einfachere Verwendung von SIMD Instruktionen erlauben sollen 2 Beispiel x86 BearbeitenBeispiel eines C Programms mit einem Inline assembler Codeteil in AT amp T Syntax GNU Assembler welches die Werte von zwei Variablen an den Inline Assemblercodeteil ubergibt diese darin addiert anschliessend das Ergebnis um den Wert 1 erhoht und dann an den C Codeteil weiter ubergibt Am Ende wird das Ergebnis ausgegeben hier 10 include lt stdio h gt int main void int foo 5 int bar 4 Hier beginnt der Inline Assembler Abschnitt in AT amp T Syntax asm add 1 0 n t Addiert den Wert von Operand 1 zum Wert von Operand 0 inc 0 Erhoht den Wert von Operand 0 um 1 Definition der Nebenbedingungen Diese weisen den C Variablen der Reihe nach aufzahlend einen fur den Inline Assemblercode nutzbaren Operanden zu und teilen dem Compiler mit auf welche Weise lesend und oder schreibend dieser im Inline Assemblercode verwendet werden kann und auf welche Register dieser beschrankt ist Dadurch wird eine korrekte und effiziente Ubergabe der Variablenwerte in und aus dem Assemblercodeabschnitt gewahrleistet r bar Gibt an dass die Variable bar sowohl gelesen als auch beschrieben wird und deren Wert in ein allgemeines Register r zu platzieren ist Als erster Operand wird er im Assemblercodeabschnitt unter der Bezeichnung 0 genutzt g foo Beschrankt die Verwendung der Variable foo nur zum Lesen Sie kann auf beliebige Weise g im Speicher in einem Register oder als Direktwert an den Assemblerteil ubergeben werden Als zweiter Operand wird er im Assemblercodeabschnitt unter der Bezeichnung 1 genutzt cc Gibt an dass die Statusanzeige durch die Befehle add und inc verandert wurde Hier geht s mit C Code weiter printf Ergebnis i n bar return 0 Liste der Compiler mit Inline Assembler Unterstutzung BearbeitenBeispiele fur Compiler mit Inline Assembler alphabetisch cc65 DMD FreeBASIC GNAT GNU Compiler Collection Microsoft Visual C nur 32 Bit Version PowerBASIC PureBasic Small Device C Compiler Turbo Pascal Borland DelphiWeblinks Bearbeiten nbsp Wikibooks Assembler Programmierung fur x86 Prozessoren Lern und Lehrmaterialien Inline assembly start from scratch IBM DeveloperEinzelnachweise Bearbeiten GCC Inline Assembly HOWTO Abschnitt 5 1 Assembler Template englisch MMX SSE and SSE2 Intrinsics Microsoft Developer Network englisch Abgerufen von https de wikipedia org w index php title Integrierter Assembler amp oldid 205227560