GNU Assembler
Der GNU Assembler, auch bekannt als GAS, ist der Assembler des GNU-Projekts. Er ist das Standard-Backend der GNU Compiler Collection. Er wird zum Assemblieren des GNU-Betriebssystems, des Linux-Kernels und vieler anderer Applikationen verwendet. Er gehört zum GNU-Binutils-Paket.

Die ausführbare Datei des GNU Assemblers ist nach dem Unix Assembler (as) benannt. GAS ist plattformübergreifend, und damit für eine große Anzahl von verschiedenen Rechnerarchitekturen sowohl lauf- als auch assemblierfähig. GAS wird unter der GNU General Public License v3 veröffentlicht und ist freie Software.

Allgemeingültige Syntax 
Der GNU Assembler hat eine allgemeingültige Syntax für alle unterstützten Architekturen. Diese Syntax beinhaltet Assembler-Direktiven und Methoden zum Kommentieren.

Assembler-Direktiven 
Der GNU Assembler verwendet Assembler-Direktiven (auch als pseudo-ops bekannt), welche aus einem Schlüsselwort beginnend mit einem Punkt gebildet werden. Die meisten verfügbaren Direktiven sind architekturunabhängig, einige wenige hardwarespezifisch.

Kommentare 
GAS nutzt standardmäßig das Rautezeichen (#) für einen Einzelzeilenkommentar. Beispiel:

pop %edx # dies ist ein Kommentar
# dies ebenfalls
movl %edx,%eax

Kritik 
Eine Quelle von Kritik an GAS ist, dass er für die x86- und x64-Architekturen anstelle der verbreiteteren Intel-Syntax die AT&T-Assembler-Syntax verwendet. Das ist allerdings in der Kompatibilität zu GCC begründet, und kann in neueren Versionen über die Direktive .intel_syntax geändert werden.

Das obige Beispiel in Intel Syntax:
.intel_syntax noprefix
pop edx        #Intel-syntax kommentar
mov eax, edx
.att_syntax prefix

Inline Assembler 
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. Hierdurch kann der Compiler einen Assembler-Teil während der Optimierung ohne Übergabe-Overheads an den Hochsprachenteil anbinden.

Das obige Beispiel als C-Inline-Assembler in Intel Syntax:
  __asm__ __volatile__  (".intel_syntax noprefix \n\t"
      "pop edx         ;Intel-syntax kommentar \n\t"
      "mov eax, edx                            \n\t"
      ".att_syntax prefix                      \n\t"
      : /* no output operands  */
      : "d" (save_var), "a" (temp_var) /* inputs operands*/
      : "eax", "edx" /* intern verwendete register (clobber list)*/);

Weblinks 

 Offizielle Webseite der binutils
 GAS-Handbuch (englisch)
 Ein Vergleich von GAS und NASM von IBM

Einzelnachweise 

GNU
Assembler
Freies Programmierwerkzeug