<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Integrierter_Assembler</id>
	<title>Integrierter Assembler - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Integrierter_Assembler"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Integrierter_Assembler&amp;action=history"/>
	<updated>2026-05-31T18:42:52Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Integrierter_Assembler&amp;diff=42448&amp;oldid=prev</id>
		<title>~2025-27928-64: /* Verwendung */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Integrierter_Assembler&amp;diff=42448&amp;oldid=prev"/>
		<updated>2025-11-22T05:41:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Verwendung&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Inline-Assembler&amp;#039;&amp;#039;&amp;#039; (oder auch &amp;#039;&amp;#039;&amp;#039;integrierter Assemblercode&amp;#039;&amp;#039;&amp;#039;) wird ein in [[Assemblersprache]] geschriebener Programmteil genannt, der im [[Quelltext]] einer [[höhere Programmiersprache|höheren Programmiersprache]] integriert ist. Die Einbettung des Assembler-Codeteils wird mittels spezieller Anweisungen deklariert (z.&amp;amp;nbsp;B. beginnend mit &amp;#039;&amp;#039;asm&amp;#039;&amp;#039;, &amp;#039;&amp;#039;__asm__&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;_asm_&amp;#039;&amp;#039; sowie ggf. mit weiteren Angaben) und dadurch dem [[Compiler]] bekanntgegeben.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Viele Compiler gehen beim Kompilieren ihrer Hochsprache sowieso den Weg über Assembler-Quelltext. Dabei kann der Inline-Assembler-Quelltext direkt vom Compiler übernommen werden.&lt;br /&gt;
Vorteile sind, dass man Programmteile in Assembler schreiben kann anstatt ganzer Funktionen (wie im Falle der Integration über den Linker), dass direkter Zugriff auf die Symbole und Variablen der Hochsprache möglich ist und dass umgekehrt auch der Compiler den Assembler-Code sieht und bei seiner Optimierung berücksichtigen kann. Beim &amp;#039;&amp;#039;[[GNU Assembler]]&amp;#039;&amp;#039; z.&amp;amp;nbsp;B. wird die Kommunikation zwischen Hochsprachcodeteil und Assemblercodeteil über ein &amp;#039;&amp;#039;Assembler Template&amp;#039;&amp;#039; ermöglicht. Es definiert die Abbildung von [[Parameter (Informatik)|Ein- und Ausgabevariablen]] aus der Hochsprache auf Assembler zugreifbare [[Register (Computer)|Register]] wie auch sonst im Assemblerteil verwendete [[Register (Computer)|Register]] (&amp;#039;&amp;#039;Clobber-List&amp;#039;&amp;#039;) die dem [[Compiler|Hochsprachcompiler]] bekannt gemacht werden.&amp;lt;ref&amp;gt;[http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html GCC-Inline-Assembly-HOWTO] – Abschnitt 5.1 &amp;#039;&amp;#039;Assembler Template&amp;#039;&amp;#039; (englisch)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der alternativ üblichen Variante, Assembler-Codeteile in Hochsprachenprogrammen zu verwenden, werden Programmteile als [[Maschinensprache|Maschinencode]] aus ggf. unterschiedlichen Sprachen auf der binären [[Linker (Computerprogramm)|Linkerebene]] verbunden und über die [[Aufrufkonvention|Funktionsschnittstelle]] aufgerufen. Vorteil ist, dass kein Compilersupport dafür notwendig ist; Nachteile sind die zwischen [[Betriebssystem]]en variierenden [[Aufrufkonvention|Calling-Conventions]], die die [[Plattformunabhängigkeit|Portierbarkeit]] erschweren sowie der zusätzliche Befehlsoverhead durch den Funktionsaufruf. Diese Probleme treten bei der Nutzung von &amp;#039;&amp;#039;Inline-Assembler&amp;#039;&amp;#039; nicht auf.&lt;br /&gt;
&lt;br /&gt;
Die neueste Variante ist die Verwendung sogenannter &amp;#039;&amp;#039;Assembler [[Intrinsische Funktion|Intrinsics]]&amp;#039;&amp;#039;, effektiv Makros, die die Assemblersyntax verstecken und so eine einfachere Verwendung von [[SIMD]]-Instruktionen erlauben sollen.&amp;lt;ref&amp;gt;[http://msdn.microsoft.com/en-us/library/y0dh78ez%28v=vs.71%29.aspx &amp;#039;&amp;#039;MMX, SSE, and SSE2 Intrinsics&amp;#039;&amp;#039;.] [[Microsoft Developer Network]] (englisch)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel (x86) ==&lt;br /&gt;
Beispiel eines [[C (Programmiersprache)|C-Programms]] mit einem &amp;#039;&amp;#039;Inline-assembler&amp;#039;&amp;#039;-Codeteil in &amp;#039;&amp;#039;AT&amp;amp;T-Syntax&amp;#039;&amp;#039; ([[GNU Assembler]]),&lt;br /&gt;
welches die Werte von zwei Variablen an den Inline-Assemblercodeteil übergibt, diese darin addiert, anschließend das Ergebnis um den Wert&amp;amp;nbsp;1 erhöht und dann an den C-Codeteil weiter übergibt. Am Ende wird das Ergebnis ausgegeben (hier 10):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  int foo = 5;&lt;br /&gt;
  int bar = 4;&lt;br /&gt;
&lt;br /&gt;
  /* Hier beginnt der Inline-Assembler Abschnitt in AT&amp;amp;T-Syntax */&lt;br /&gt;
  __asm__ (&lt;br /&gt;
      &amp;quot;add %1, %0\n\t&amp;quot; /* Addiert den Wert von Operand %1 zum Wert von Operand %0. */&lt;br /&gt;
      &amp;quot;inc %0&amp;quot;         /* Erhöht den Wert von Operand %0 um 1. */&lt;br /&gt;
&lt;br /&gt;
      /* Definition der Nebenbedingungen:&lt;br /&gt;
       * Diese weisen den C-Variablen der Reihe nach aufzählend einen für den Inline-Assemblercode nutzbaren Operanden&lt;br /&gt;
       * zu und teilen dem Compiler mit, auf welche Weise (lesend und/oder schreibend) dieser im Inline-Assemblercode&lt;br /&gt;
       * verwendet werden kann und auf welche Register dieser beschränkt ist. Dadurch wird eine korrekte und effiziente&lt;br /&gt;
       * Übergabe der Variablenwerte in und aus dem Assemblercodeabschnitt gewährleistet. */&lt;br /&gt;
      : &amp;quot;+r&amp;quot; (bar) /* Gibt an, dass die Variable bar sowohl gelesen als auch beschrieben (&amp;#039;+&amp;#039;) wird und deren Wert in&lt;br /&gt;
                    * ein allgemeines Register (&amp;#039;r&amp;#039;) zu platzieren ist.&lt;br /&gt;
                    * Als erster Operand wird er im Assemblercodeabschnitt unter der Bezeichnung %0 genutzt. */&lt;br /&gt;
      : &amp;quot;g&amp;quot; (foo)  /* Beschränkt die Verwendung der Variable foo nur zum Lesen. Sie kann auf beliebige Weise (&amp;#039;g&amp;#039;, im&lt;br /&gt;
                    * Speicher, in einem Register oder als Direktwert) an den Assemblerteil übergeben werden.&lt;br /&gt;
                    * Als zweiter Operand wird er im Assemblercodeabschnitt unter der Bezeichnung %1 genutzt */&lt;br /&gt;
      : &amp;quot;cc&amp;quot;       /* Gibt an, dass die Statusanzeige (durch die Befehle add und inc) verändert wurde. */&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  /* Hier geht&amp;#039;s mit C Code weiter. */&lt;br /&gt;
  printf(&amp;quot;Ergebnis: %i\n&amp;quot;, bar);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Liste der Compiler mit Inline-Assembler-Unterstützung ==&lt;br /&gt;
Beispiele für Compiler mit Inline-Assembler (alphabetisch):&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [[D_(Programmiersprache)|DMD]]&lt;br /&gt;
* [[FreeBASIC]]&lt;br /&gt;
* [[GNAT]]&lt;br /&gt;
* [[GNU Compiler Collection]]&lt;br /&gt;
* [[Microsoft Visual C++]] (nur 32-Bit-Version)&lt;br /&gt;
* [[PowerBASIC]]&lt;br /&gt;
* [[PureBasic]]&lt;br /&gt;
* [[Small Device C Compiler]]&lt;br /&gt;
* [[Turbo Pascal]] / [[Borland Delphi]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks|Assembler-Programmierung für x86-Prozessoren}}&lt;br /&gt;
* [https://www.ibm.com/developerworks/aix/library/au-inline_assembly/index.html Inline assembly - start from scratch] IBM Developer&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierwerkzeug]]&lt;br /&gt;
[[Kategorie:Assembler]]&lt;/div&gt;</summary>
		<author><name>~2025-27928-64</name></author>
	</entry>
</feed>