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. 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