<?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=GNU_Assembler</id>
	<title>GNU 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=GNU_Assembler"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Assembler&amp;action=history"/>
	<updated>2026-06-11T06:37:34Z</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=GNU_Assembler&amp;diff=2120668&amp;oldid=prev</id>
		<title>imported&gt;Darkking3: m</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Assembler&amp;diff=2120668&amp;oldid=prev"/>
		<updated>2026-03-23T11:32:05Z</updated>

		<summary type="html">&lt;p&gt;m&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Software&lt;br /&gt;
| Name                         = &lt;br /&gt;
| AktuelleVersion              = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVersionFreigabeDatum = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Hersteller                   = [[GNU-Projekt]]&lt;br /&gt;
| Programmiersprache           = [[C (Programmiersprache)|C]]&lt;br /&gt;
| Betriebssystem               = [[Cross-platform]]&lt;br /&gt;
| Kategorie                    = [[Assembler (Informatik)|Assembler]]&lt;br /&gt;
| Lizenz                       = [[GNU General Public License]] v3&lt;br /&gt;
| Website                      = [https://www.gnu.org/software/binutils/ www.gnu.org/software/binutils]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der &amp;#039;&amp;#039;&amp;#039;GNU Assembler&amp;#039;&amp;#039;&amp;#039;, auch bekannt als &amp;#039;&amp;#039;&amp;#039;GAS&amp;#039;&amp;#039;&amp;#039;, ist der [[Assembler (Informatik)|Assembler]] des [[GNU-Projekt]]s. Er ist das Standard-[[Front-End und Back-End|Backend]] der [[GNU Compiler Collection|&amp;#039;&amp;#039;&amp;#039;G&amp;#039;&amp;#039;&amp;#039;NU &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;ompiler &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;ollection]] und wird folglich zum Assemblieren des Betriebssystems [[GNU]], des [[Linux (Kernel)|Linux-Kernels]] und vieler anderer insbesondere als Quelltext[[Programmpaket|pakete]] verfügbarer Applikationen verwendet. Er gehört zu den [[GNU Binutils|GNU Binary Utilities]] (&amp;#039;&amp;#039;binutils&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Die [[ausführbare Datei]] des GNU Assemblers wird wie der Assembler des ursprünglichen [[Unix]] von [[AT&amp;amp;T]] und Assembler späterer Unix-artiger Betriebssysteme mit &amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt; aufgerufen. GAS ist [[Plattformunabhängigkeit|plattformübergreifend]], und damit für eine große Anzahl von verschiedenen [[Rechnerarchitektur]]en sowohl lauf- als auch assemblierfähig. Als üblicher Assembler für die GCC ist er in u.&amp;amp;nbsp;a. vielen [[Linux-Distribution]]en und [[Berkeley Software Distribution|BSD]]-Abkömmlingen enthalten.&lt;br /&gt;
&lt;br /&gt;
GAS wird unter der [[GNU General Public License]] v3 veröffentlicht und ist [[freie Software]].&lt;br /&gt;
&lt;br /&gt;
== Kompatibilität ==&lt;br /&gt;
Für gängige [[Prozessorarchitektur|Mikroprozessorarchitekturen]] wie [[AArch64]],&amp;lt;ref&amp;gt;{{Internetquelle |url=https://archlinuxarm.org/packages/aarch64/binutils |titel=binutils 2.42 |hrsg=Arch Linux ARM |sprache=en |abruf=2024-11-27}}&amp;lt;/ref&amp;gt; [[IBM]]s (bzw. AIMs) Enhanced [[Reduced Instruction Set Computer|RISC]] ([[Power-Architektur|IBM POWER]] und [[PowerPC]]) und [[x86-Architektur|x86]] ab dem [[Intel 80386|80386]] (dazu s. [[#x86-16|Abschnitt]]) ist der GNU Assembler nativ vorkompiliert erhältlich. Als Cross-Assembler etwa für vergleichsweise leistungsschwache oder veraltete Prozessoren wie die [[Motorola-68000er-Familie|M68000er Familie]] oder den [[Zilog Z80|Z80]] muss er in vielen Fällen mit den geeigneten Werkzeugen aus Quellen in der [[Packprogramm|Archivdatei]], mit der die binutils veröffentlicht werden, erstellt werden; wobei abhängig von Betriebssystem, [[Prozessor#Hauptprozessor (CPU) und Mehrprozessorkerne|CPU]] und Assemblierungsziel (namentlich dem sehr bekannten Z80)&amp;lt;ref&amp;gt;{{Internetquelle |url=https://packages.debian.org/buster/binutils-z80 |titel=binutils-z80 2.31.1 |werk=Debian package repository |hrsg=Debian |sprache=en, mul |abruf=2024-11-29}} Komprimierte Archive für amd64, ARM64, i386 und ARMhf.&amp;lt;/ref&amp;gt; auch (ältere) binutils-Pakete fertig angeboten werden.&lt;br /&gt;
&lt;br /&gt;
Der dem Betriebssystem eigene Assembler ist in der [[Unix-Shell|Shell]] gewöhnlich als &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;/usr/bin/as&amp;lt;/span&amp;gt; über den voreingestellten [[Suchpfad]] aufrufbar (s. auch [[Filesystem Hierarchy Standard]]). Zusätzliche binutils werden gewöhnlich als &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;/usr/binutils-&amp;lt;Zielrechner&amp;gt;&amp;lt;/span&amp;gt; angelegt worin die ausführbaren Dateien sind. gas hat keine [[Unix-Kommando|Schalter]] wie &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;gcc&amp;lt;/span&amp;gt;, die ausführbare Datei des &amp;#039;&amp;#039;GNU C Compilers&amp;#039;&amp;#039;, für einen eigenen Suchpfad und den Aufruf anderer Ausgaben. Um einen Cross-Assembler in einer Shell bequem aufzurufen, kann z.&amp;amp;nbsp;B. in deren [[Konfigurationsdatei]] ein &amp;#039;&amp;#039;alias&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;{{Internetquelle |url=https://man7.org/linux/man-pages/man1/dash.1.html#DESCRIPTION |titel=dash(1) — Linux manual page, DESCRIPTION |werk=Linux Manual Pages, General Commands Manual |hrsg=Michael Kerrisk |datum=2024-06-08 |sprache=en |abruf=2024-12-14}} Abschnitt &amp;#039;&amp;#039;Invocation&amp;#039;&amp;#039;; Abschnitt &amp;#039;&amp;#039;Builtins&amp;#039;&amp;#039;, Eintrag &amp;#039;&amp;#039;alias&amp;#039;&amp;#039;.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Webarchiv |url=https://fibel.org/linux/lfo-0.6.0/node212.html |text=&amp;#039;&amp;#039;8.6.1 /etc/profile&amp;#039;&amp;#039; |wayback=20041222072412}}&amp;lt;/ref&amp;gt; für &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;/usr/binutils-&amp;lt;soundso&amp;gt;/as&amp;lt;/span&amp;gt; eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
=== GNU Assembler und Microsoft Windows ===&lt;br /&gt;
In [[Cygwin]] v3.5.5 läuft gas ab [[Microsoft Windows 8#Windows 8.1|Windows 8.1]],&amp;lt;ref&amp;gt;[https://www.cygwin.com/ Cygwin-Webseite] vom 30. Dezember 2024 (englisch).&amp;lt;/ref&amp;gt; binutils in neuester Fassung kann kompiliert für [[x64|x86-64]]&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.cygwin.com/packages/summary/binutils.html |titel=Package: binutils |werk=Cygwin |hrsg=Red Hat |datum=2024-08-24 |sprache=en |abruf=2024-12-08}}&amp;lt;/ref&amp;gt; und als Quellenpaket&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.cygwin.com/packages/summary/binutils-src.html |titel=Source Package: binutils |werk=Cygwin |hrsg=Red Hat |datum=2024-08-24 |sprache=en |abruf=2024-12-08}}&amp;lt;/ref&amp;gt; vom Entwickler heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Für [[MinGW]] gibt es eine eigene Ausgabe der binutils.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Der GNU Assembler ist vorrangig dazu vorgesehen von den [[Compiler]]n der GCC in [[Assemblersprache]] verfasste Quellen in [[Linker (Computerprogramm)|Objektdateien]] zu übersetzen. Je nach Zielsystem haben diese voreingestellt einen bestimmten Namen – für [[Linux]] auf x86 ist das &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;a.out&amp;lt;/span&amp;gt;, gemäß Übereinkunft erhalten sie allgemein die Endung &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;.o&amp;lt;/span&amp;gt; – und sind entweder im, wie in Unix-artigen Betriebssystemen üblich, [[Executable and Linking Format|Executable and Linkable]] (&amp;#039;&amp;#039;ELF&amp;#039;&amp;#039;) oder [[Common Object File Format]] (&amp;#039;&amp;#039;COFF&amp;#039;&amp;#039;) bzw. einem seiner Abkömmlinge wie dem hauptsächlich in Windows und vom [[Unified Extensible Firmware Interface|Extensible Firmware Interface]] verwendeten [[Portable Executable]]; und werden ggf. mit dem [[GNU Linker]] (&amp;lt;code&amp;gt;ld&amp;lt;/code&amp;gt;) aus dem binutils-Paket zu fertigen ausführbaren [[Binärdatei]]en bearbeitet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;a.out&amp;lt;/span&amp;gt; ist gemäß Voreinstellung von gas [[Unix-Dateirechte|ausführbar gemacht]].&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
Der GNU Assembler hat allgemeine und tws. viele für das System, für das assembliert werden kann, verfügbare Aufrufparameter, von denen einige folgend aufgeführt sind. Dabei ist zu beachten, dass in der Unixwelt [[case sensitivity]] vorherrscht.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt; zeigt eine Zusammenfassung über die Optionsschalter, &amp;lt;code&amp;gt;--target-help&amp;lt;/code&amp;gt; eine über die zielbezogenen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;--dump-config&amp;lt;/code&amp;gt; zeigt wie der Assembler eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
:Mit &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, einer angehängten [[Folge (Mathematik)|Folge]] bestimmter Kleinbuchstaben, einem abschließenden &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; und einem folgenden Dateinamen wird in der Datei ein Protokoll über bestimmte Eigenschaften der zu erfolgenden Assemblierung verfasst.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-version&amp;lt;/code&amp;gt;) zeigt die Version von &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;as&amp;lt;/span&amp;gt; an, &amp;lt;code&amp;gt;--version&amp;lt;/code&amp;gt; beendet zudem die Ausführung.&lt;br /&gt;
&lt;br /&gt;
Verschiedene Schalter dienen der Behebung von oder dem Umgang mit Fehlern oder bestimmen die Darstellung in der Protokolldatei.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; weist formal darauf hin, dass &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;as&amp;lt;/span&amp;gt; die [[Unix-Kommando#Standard-Ein-/Ausgabe|Standardeingabe]] lesen soll und kann auch weggelassen werden. Ist diese das [[Terminal (Computer)|Terminal]] können Zeilen von [[Programmcode|Code]] eingegeben und die Eingabe mit &amp;lt;[[Steuerungstaste|Strg]]&amp;gt;+&amp;lt;D&amp;gt; beendet werden.&lt;br /&gt;
&lt;br /&gt;
Jedes [[Kommandozeile|Befehlszeilenargument]] ohne festgelegte Bedeutung wird von &amp;lt;span style=&amp;quot;font-family:monospace&amp;quot;&amp;gt;as&amp;lt;/span&amp;gt; als zu assemblierende Datei aufgefasst. Die übergebene Folge von Dateien wird von links gelesen und in eine Objektdatei, bestehend aus ausführbarem Maschinencode und zusätzlichen Daten, übersetzt.&lt;br /&gt;
&lt;br /&gt;
Wird gas vom gcc aufgerufen kann dieser mit dem Schalter &amp;lt;code&amp;gt;-Wa&amp;lt;/code&amp;gt; jenes Parameter zu ihm durchreichen, indem sie nach einem Komma von Kommata getrennt eingetragen werden, also gemäß&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;lt;Eingabeaufforderung&amp;gt; gcc &amp;lt;cparam1 cparam2 …&amp;gt; -Wa,&amp;lt;aparam1,aparam2,…&amp;gt; &amp;lt;cparamN …&amp;gt; &amp;lt;ctext1.c ctext2.c …&amp;gt;&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
in einer Befehlszeile.&lt;br /&gt;
&lt;br /&gt;
=== x86 ===&lt;br /&gt;
Es gibt Schalter für u.&amp;amp;nbsp;a. Übersetzung von [[Vektorprozessor|Vektorbefehlen]] und [[Speicherausrichtung]] von Programmverzweigungen.&lt;br /&gt;
&lt;br /&gt;
:Die &amp;lt;code&amp;gt;-march=&amp;lt;/code&amp;gt; zu übergebenden und mit einem Pluszeichen voneinander zu trennenden Werte stehen für einen [[Befehlssatz]], darunter z.&amp;amp;nbsp;B. &amp;#039;&amp;#039;i8086&amp;#039;&amp;#039;, &amp;#039;&amp;#039;k8&amp;#039;&amp;#039;, &amp;#039;&amp;#039;core2&amp;#039;&amp;#039;, &amp;#039;&amp;#039;generic32&amp;#039;&amp;#039; und &amp;#039;&amp;#039;generic64&amp;#039;&amp;#039;; und wahlweise Erweiterungen oder bestimmte Befehle wie z.&amp;amp;nbsp;B. die [[x87|Numeric Processor]], [[Streaming SIMD Extensions|Streaming SIMD]] und [[Advanced Vector Extensions]], die mit vorgesetztem &amp;#039;&amp;#039;no&amp;#039;&amp;#039; ausgeschlossen werden können. Die angewiesene Assemblierung darin nicht enthaltener Befehle verursacht eine Fehlermeldung. Der Schalter kann mit der Direktive (s.&amp;amp;nbsp;u.) &amp;lt;code&amp;gt;.arch&amp;lt;/code&amp;gt; übersteuert werden.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;-mtune=&amp;lt;/code&amp;gt; nimmt dieselben Werte für den Befehlssatz an und veranlasst gas, für den entsprechenden Prozessor optimierten [[Maschinensprache|Maschinencode]] zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
erfahrener_Programmierer@Tischrechner:~$ as -march=athlon+mmx+no3dnow+sse -mtune=generic64 assembly-Programm.S -o Maschinenprogramm.elf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der Benutzer lässt in der Unix-Shell eine Quelltextdatei so assemblieren, dass das zu erzeugende Programm auf Lauffähigkeit auf dem [[AMD Athlon XP]] hin geprüft, Optimierung für Prozessoren seit [[amd64]] wenn möglich vorgenommen und die Verwendung von [[3DNow!]] ausgeschlossen wird, zudem erhält die Ausgabedatei einen anderen als den [[#Verwendung|voreingestellten]] Namen.&lt;br /&gt;
&lt;br /&gt;
=== ARM64 ===&lt;br /&gt;
Es gibt fünf Schalter für die Assemblierungseinstellung. Es kann bestimmt werden ob die Ausgabedatei entweder für einen rangaufsteigend oder rangabsteigend speichernden (s. [[Byte-Reihenfolge|&amp;#039;&amp;#039;endianness&amp;#039;&amp;#039;]]) Prozessor geeignet; und ob sie im ELF64 oder -32 ist.&lt;br /&gt;
&lt;br /&gt;
:Wie bei den Befehlssätzen von x86 kann mit &amp;lt;code&amp;gt;-mcpu=&amp;lt;/code&amp;gt; eine Art [[Prozessorkern|Rechenkern]] bspw. als &amp;lt;code&amp;gt;cortex-a55&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;[[Samsung Exynos|exynos]]-m1&amp;lt;/code&amp;gt; angegeben werden; mit dem Unterschied, dass etwaige Befehlssatzerweiterungen voreingestellt inbegriffen sind.&lt;br /&gt;
&lt;br /&gt;
:Entsprechend kann mit &amp;lt;code&amp;gt;-march=&amp;lt;/code&amp;gt; eine Mikroarchitektur [[AArch64#Übersicht|ab &amp;#039;&amp;#039;armv8-a&amp;#039;&amp;#039;]] bis &amp;#039;&amp;#039;armv9.4-a&amp;#039;&amp;#039; (Stand Juni 2024) gewählt werden, wobei Erweiterungen nicht immer voreingestellt dabei sind.&lt;br /&gt;
&lt;br /&gt;
Werden weder Prozessor noch -generation bestimmt, gilt &amp;lt;code&amp;gt;-mcpu=all&amp;lt;/code&amp;gt;, was bedeutet, dass alle Befehle assembliert werden.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Die [[Syntax]] des GNU Assemblers hat einen allgemeingültigen Teil für alle unterstützten Architekturen. Er ist ähnlich vielen anderen Assemblern und von früheren Unix-Assemblern beeinflusst. Er beinhaltet u.&amp;amp;nbsp;a. Anweisungen für den Assembler, sog. Direktiven, Methoden zum Kommentieren und Darstellung von Zahlenwerten („Konstanten“).&lt;br /&gt;
&lt;br /&gt;
Maschinenabhängige Ausdrücke wie insbesondere [[Assemblersprache|Befehle]] und [[Register (Prozessor)|Register]] sind der Herstellerbeschreibung zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== Direktiven ===&lt;br /&gt;
Assembler-Direktiven (auch &amp;#039;&amp;#039;pseudo-ops&amp;#039;&amp;#039; genannt) werden aus einem Schlüsselwort mit einem Punkt beginnend gebildet. Die meisten verfügbaren Direktiven sind architekturunabhängig, einige wenige hardwarespezifisch.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.sourceware.org/binutils/docs-2.12/as.info/Pseudo-Ops.html |titel=The GNU Assembler – Assembler Directives |werk=sourceware.org |sprache=en |abruf=2022-03-27}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
Kommentare können allgemein zwischen &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt; geschrieben werden. Zeilenkommentare einleitende Zeichenfolgen wie &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; usw. sind zielabhängig.&lt;br /&gt;
&lt;br /&gt;
Für die x86-Mikroarchitektur nutzt GAS standardmäßig eine [[Rautezeichen|Raute]] für Einzelzeilenkommentare. Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
pop %edx # alles hinter der Raute ist Kommentar&lt;br /&gt;
#AX und DX sind 86er Register&lt;br /&gt;
movl %edx,%eax&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konstanten ===&lt;br /&gt;
Werte können auf verschiedene Weisen geschrieben werden, die außer für [[Dezimalsystem|dezimale]] Ganzzahlen von Vorsätzen bestimmt werden: &amp;lt;code&amp;gt;0b&amp;lt;/code&amp;gt; für [[Dualsystem|Binär-]], &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; für [[Oktalsystem|Oktal-]], &amp;lt;code&amp;gt;0x&amp;lt;/code&amp;gt; für [[Hexadezimalsystem|hexadekadische]] Zahlen und &amp;lt;code&amp;gt;&amp;#039;&amp;lt;/code&amp;gt; für [[Zeichen|Schriftzeichen]]; [[Fließkommazahl]]en kann zielabhängig z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;0f&amp;lt;/code&amp;gt; vorgesetzt werden. Zu den [[Integer (Datentyp)|Ganzzahlen]] gehören auch „bignums“, sie sind länger als 32 [[bit]]s, entsprechen somit z.&amp;amp;nbsp;B. dem 64 bits langen [[Datentyp]] &amp;#039;&amp;#039;long&amp;#039;&amp;#039; mancher [[Höhere Programmiersprache|Hochsprachen]]&amp;lt;ref&amp;gt;&amp;#039;&amp;#039;C von A bis Z – Das umfassende Handbuch&amp;#039;&amp;#039; von Jürgen Wolf bei Rheinwerk, 3. Auflage; [https://openbook.rheinwerk-verlag.de/c_von_a_bis_z/005_c_basisdatentypen_001.htm Abschnitte 5.4f].&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |autor=James Gosling, Bill Joy, … |url=https://docs.oracle.com/javase/specs/jls/se23/html/jls-4.html#jls-4.2 |titel=4.2. Primitive Types and Values |werk=The Java® Language Specification, Java SE 23 Edition |hrsg=Oracle Corporation |datum=2024-08-21 |sprache=en |abruf=2024-12-30}}&amp;lt;/ref&amp;gt; und können nicht uneingeschränkt verwendet werden. Zeichen sind ein [[byte]] lang, ihre Darstellung ist vom auf dem System verwendeten [[Zeichensatz]] abhängig, also z.&amp;amp;nbsp;B. nach Art der [[ISO 8859-15]], sie können als [[Escape-Sequenz]] eingetragen werden und zielabhängig kann ein abschließendes [[Anführungszeichen#Typografische Anführungszeichen|Halbes Schreibmaschinenersatzzeichen]] nötig sein.&lt;br /&gt;
&lt;br /&gt;
Wird einem Wert der Operator &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; vorangestellt ist das Ergebnis der [[Zweierkomplement|binär komplementäre]] Wert; entsprechend erzeugt &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; den [[Bitweiser Operator#NICHT|bitweise komplementären]].&lt;br /&gt;
&lt;br /&gt;
== Inline Assembler ==&lt;br /&gt;
Der GNU Assembler zeichnet sich gegenüber anderen Assemblern auch durch eine Inline-Syntax aus, die es ermöglicht, den Assembler-Teil effektiv in einen Hochsprachenteil einzubinden. Dies geschieht durch eine Liste der Eingabe-, Ausgaberegister und der im Assembler-Teil verwendeten Register.&amp;lt;ref&amp;gt;{{cite web |url=http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s5 |title=5. Extended Asm. |quote=&amp;#039;&amp;#039;[…] we can also specify the operands. It allows us to specify the input registers, output registers and a list of clobbered registers&amp;#039;&amp;#039;|date=2003-03-01 |accessdate=2011-07-27 |language=en |work=ibiblio.org}}&amp;lt;/ref&amp;gt; Hierdurch kann der Compiler einen Assembler-Teil während der Optimierung ohne Übergabe-Overheads an den Hochsprachenteil anbinden.&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel als [[C (Programmiersprache)|C]]-[[Inline-Assembler]] in Intel-Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  __asm__ __volatile__  (&amp;quot;.intel_syntax noprefix \n\t&amp;quot;&lt;br /&gt;
      &amp;quot;pop edx         ;Intel-syntax kommentar \n\t&amp;quot;&lt;br /&gt;
      &amp;quot;mov eax, edx                            \n\t&amp;quot;&lt;br /&gt;
      &amp;quot;.att_syntax prefix                      \n\t&amp;quot;&lt;br /&gt;
      : /* no output operands  */&lt;br /&gt;
      : &amp;quot;d&amp;quot; (save_var), &amp;quot;a&amp;quot; (temp_var) /* inputs operands*/&lt;br /&gt;
      : &amp;quot;eax&amp;quot;, &amp;quot;edx&amp;quot; /* intern verwendete register (clobber list)*/);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== x86-16 ==&lt;br /&gt;
Infolge der [[Datenwort|Wortlänge]] von 2 [[Byte]]s der [[Intel 8086]], [[Intel 80286|80286]] u.&amp;amp;nbsp;ä. kann der GNU Assembler auf ihnen nicht laufen. Um [[Computerprogramm|Programme]] für sie (oder den [[Real Mode|Real]] oder [[Virtual 8086 Mode]]) zu assemblieren, kann die Direktive &amp;lt;code&amp;gt;.code16&amp;lt;/code&amp;gt; zur Voreinstellung verwendet werden. Das gewährleistet nicht, dass das Programm auf den alten Prozessoren läuft. Dazu muss auf alle 32- und 64-[[Bit]]-Ausdrücke verzichtet werden, sonst werden sie mit den [[Maschinensprache]]nvorsätzen &amp;#039;&amp;#039;66&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;67&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; für die entsprechenden [[Operator (Mathematik)#Operand|Operanden]]- bzw. [[Arbeitsspeicher]]adressenlängen zur Übersteuerung der Real-Mode-Voreinstellung assembliert. Es dürfen daher insbesondere nur die Befehlsanhänge &amp;#039;&amp;#039;-b&amp;#039;&amp;#039; für 1 byte oder &amp;#039;&amp;#039;-w&amp;#039;&amp;#039; für 2 bytes („word“) lange Operanden in AT&amp;amp;T-Ausdrucksweise wie bei &amp;lt;code&amp;gt;movb&amp;lt;/code&amp;gt; und Registernamen wie &amp;lt;code&amp;gt;%ax&amp;lt;/code&amp;gt; statt &amp;lt;code&amp;gt;%eax&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt; (s. [[x86-Architektur#Real Mode|Register des 8086]]) verwendet werden.&amp;lt;!--vielleicht Programmbeispiel (und Gegenbsp.)--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kritik ==&lt;br /&gt;
Eine Quelle negativer Kritik an GAS ist, dass für die Zielsysteme [[IA-32|x86-32]] und x86-64 (als „80386“ zusammengefasst) anstelle der meistens verwendeten Syntax nach Art des eingestellten [[ASM86]] von [[Intel]] die im Umfeld Unix-artiger Betriebssysteme bevorzugte &amp;#039;&amp;#039;AT&amp;amp;T-Assembler-Syntax&amp;#039;&amp;#039; voreingestellt ist.&amp;lt;ref&amp;gt;Susan Welsh: {{Webarchiv |url=http://www.sig9.com/articles/att-syntax |text=&amp;#039;&amp;#039;AT&amp;amp;T Assembly Syntax&amp;#039;&amp;#039; |wayback=20200107083737}}. Sig 9, 17. Juli 2017. (englisch).&amp;lt;/ref&amp;gt; Das ist allerdings in der Kompatibilität zur GCC begründet,&amp;lt;ref&amp;gt;{{Internetquelle |url=https://ftp.gnu.org/old-gnu/Manuals/gas-2.9.1/html_node/as_196.html |titel=AT&amp;amp;T Syntax versus Intel Syntax |werk=gnu.org |sprache=en |abruf=2024-12-17}}&amp;lt;/ref&amp;gt; denn so können beispielsweise Ausdrücke in [[C (Programmiersprache)|C]] übersichtlicher eingefügt werden. Seit binutils 2.10 von Juni 2000&amp;lt;ref&amp;gt;{{Internetquelle |url=https://asm.sourceforge.net/howto/gas.html |titel=GAS |hrsg=Sourceforge |sprache=en |abruf=2024-11-21}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |url=https://ftp.gnu.org/gnu/binutils/ |titel=Index der binutils-Archive |hrsg=GNU-Projekt |sprache=en |abruf=2024-11-21}}&amp;lt;/ref&amp;gt; kann die vorgegebene Syntax über die Direktiven &amp;lt;code&amp;gt;.intel_syntax&amp;lt;/code&amp;gt; geändert bzw. &amp;lt;code&amp;gt;.att_syntax&amp;lt;/code&amp;gt; wiederhergestellt werden.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Ram Narayan |url=https://developer.ibm.com/articles/l-gas-nasm/ |titel=Linux assemblers: A comparison of GAS and NASM |titelerg=A side-by-side look at GNU Assembler (GAS) and Netwide Assembler (NASM) |werk=developer.ibm.com |datum=2007-10-16 |sprache=en |abruf=2024-12-27}}&amp;lt;/ref&amp;gt; Die ausführbare Datei von gas für x86 hat auch den Schalter &amp;lt;code&amp;gt;-msyntax=&amp;lt;/code&amp;gt; mit den Werten &amp;lt;code&amp;gt;intel&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;att&amp;lt;/code&amp;gt; mit denen jeweils die vorrangige Syntax bestimmt werden kann.&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel in &amp;#039;&amp;#039;Intel-Syntax&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.intel_syntax noprefix #mit Argument dass Register als Operanden den Vorsatz &amp;#039;%&amp;#039; nicht benötigen&lt;br /&gt;
pop edx&lt;br /&gt;
mov eax, edx&lt;br /&gt;
.att_syntax prefix&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks|Assembler-Programmierung für x86-Prozessoren}}&lt;br /&gt;
* [https://www.gnu.org/software/binutils/ Offizielle Webseite der binutils]&lt;br /&gt;
* [https://sourceware.org/binutils/docs/as/ GAS-Handbuch] (englisch, in neuester Ausgabe)&lt;br /&gt;
* [https://man7.org/linux/man-pages/man1/as.1.html as(1) — Linux manual page] aus binutils-2.42&lt;br /&gt;
* [https://developer.ibm.com/articles/l-gas-nasm/ Ein Vergleich von GAS und NASM] von IBM (englisch, 2007)&lt;br /&gt;
* [[:en:A.out|a.out (&amp;#039;&amp;#039;assembler output&amp;#039;&amp;#039;)]] und Geschichte (englischsprachige Wikipedia)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GNU|Assembler]]&lt;br /&gt;
[[Kategorie:Assembler]]&lt;br /&gt;
[[Kategorie:Freies Programmierwerkzeug]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Darkking3</name></author>
	</entry>
</feed>