GNU Assembler

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
GNU Assembler
Entwickler GNU-Projekt
Aktuelle Version 2.24
(2. Dezember 2013)
Betriebssystem Cross-platform
Programmier­sprache C
Kategorie Assembler
Lizenz GNU General Public License v3
www.gnu.org/software/binutils

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 operating systems, 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 plattformunabhängig, 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[Bearbeiten]

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[Bearbeiten]

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.[1]

Kommentare[Bearbeiten]

GAS nutzt standardmäßig das # Zeichen für einen Einzelzeilenkommentar.

Beispiel: pop %edx# dies ist ein Kommentar # dies ebenfalls

movl %edx,%eax

Kritik[Bearbeiten]

Eine Quelle von Kritik an dem GAS ist, dass er für die x86 und x86-64 Architekturen anstelle der verbreiteteren Intel Syntax die AT&T Assembler Syntax verwendet [2]. Seit Version 2.10 [3] unterstützt GAS jedoch auch die Intel Syntax über die Direktive .intel_syntax.[4]

Das obige Beispiel in Intel Syntax:

.intel_syntax noprefix
pop edx         ;Intel-syntax kommentar
mov eax, edx
.att_syntax prefix

Inline Assembler[Bearbeiten]

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.[5] 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[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. The GNU Assembler - Assembler Directives. Abgerufen am 31. Dezember 2010.
  2. Randall Hyde: Which Assembler is the Best?. Abgerufen am 18. Mai 2008.
  3. GNU Assembler News, v2.1 supports Intel syntax. 4. April 2008. Abgerufen am 2. Juli 2008.
  4. Ram Narayam: Linux assemblers: A comparison of GAS and NASM. 17. Oktober 2007. Archiviert vom Original am 15. Februar 2009. Abgerufen am 2. Juli 2008.
  5. 5. Extended Asm. (englisch) www.ibiblio.org. 1. März 2003. Abgerufen am 27. Juli 2011: „[...]we can also specify the operands. It allows us to specify the input registers, output registers and a list of clobbered registers