- GNU Assembler
-
GNU Assembler Entwickler GNU-Projekt Aktuelle Version 2.21
(8. Dezember 2010)Betriebssystem Cross-platform Programmiersprache 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.
Inhaltsverzeichnis
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 einer Schlüsselwort beginnend mit einem Punkt gebildet werden. Die meisten verfügbaren Direktiven sind architekturunabhängig, einige wenige hardwarespezifisch.[1]
Kommentare
GAS nutzt standardmäßig das # Zeichen für einen Einzelzeilenkommentar.
Beispiel:
pop %edx # dies ist ein Kommentar # dies ebenfalls movl %edx,%eax
Kritik
Eine Quelle von Kritik an dem GAS ist, dass er für die x86 und x86-64 Architekturen die AT&T Assembler Syntax verwendet, anstatt der verbreiteteren Intel Syntax[2]. Jedoch, seit Version 2.10,[3] unterstützt GAS 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
Der GNU Assembler zeichnet gegenüber anderen Assemblern auch durch eine Inline-Syntax aus die es ermöglicht den Assembler Teil effektiv in einen Hochsprachen-Teil einzubinden, dies geschieht durch eine Liste der Eingabe-, Ausgaberegister und der im Assemblerteil verwendeten Register.[5] Hierdurch kann der Kompiler einen Assembler Teil während der Optimierung ohne Übergabeoverheads 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
Wikibooks: Assembler (80x86 Prozessor)-Programmierung – Lern- und LehrmaterialienEinzelnachweise
- ↑ The GNU Assembler - Assembler Directives. Abgerufen am 31. Dezember 2010.
- ↑ Randall Hyde: Which Assembler is the Best?. Abgerufen am 18. Mai 2008.
- ↑ GNU Assembler News, v2.1 supports Intel syntax (4. April 2008). Abgerufen am 2. Juli 2008.
- ↑ Ram Narayam (17. Oktober 2007): Linux assemblers: A comparison of GAS and NASM. Abgerufen am 2. Juli 2008.
- ↑ 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“
Wikimedia Foundation.