====== Das erste Programm assemblieren, linken und ausführen ====== Nun ist es soweit, wir werden unser erstes Programm mit NASM assemblieren und ausführen :-) ===== Code abspeichern ===== Hier der Code des ersten Beispiels, das üblicherweise einem "Hello World"-Programm entspricht: section .data HelloString: db "Hallo Welt!",10 HelloStringLength equ $ - HelloString section .text global _start _start: mov rax, 4 mov rbx, 1 mov rcx, HelloString mov rdx, HelloStringLength int 0x80 mov rax, 1 mov rbx, 0 int 0x80 Keine Angst, es ist natürlich noch nicht notwendig auch nur ansatzweise zu verstehen was dieser Code macht ;-)\\ Dieser Code wird in der Datei "first.asm" gespeichert. ".asm" ist eine gängige Dateierweiterung für Assembler-Code, wir machen hier auch keine Ausnahme. ===== Code assemblieren ===== Nun können wir unseren Assembler-Code in echten Binär-Code umwandeln, den der Prozessor versteht. Da es verschiedene Formate für ausführbare Dateien gibt, muss das Ausgabeformat beim Assemblieren mit dem "-f"-Flag angegeben werden. Linux verwendet für ausführbare Dateien das format [[elf:start|ELF]]. Da wir für ein 64-bit System assemblieren, lautet unser Format "elf64". Dadurch ergibt sich folgender Befehl zum Assemblieren: $ nasm -f elf64 first.asm Dieser Befehl liefert normal keine Ausgabe in der Konsole, legt aber eine Objektdatei "first.o" an. ===== Objektdatei linken ===== Eine Objektdatei ist eine rohe Binärdatei, die so aber noch nicht ausgeführt werden kann. Dafür muss sie erst mit dem Linker zu einer echten ausführbaren Datei umgewandelt werden. Um das zu tun, wird dem Linker ''ld'' einfach die Binärdatei als Parameter übergeben. Dadurch wird eine ausführbare Datei mit dem Namen "a.out" angelegt. Der Name dieser Datei kann über den "-o"-Flag verändert werden. Wollen wir unser Programm als "first" speichern, wird der Linker folgendermaßen ausgeführt: $ ld first.o -o first ===== Programm ausführen ===== Das Programm kann nun wie jedes andere aus der Konsole aufgerufen werden: $ ./first Hallo Welt! $ ===== Abschließendes ===== So weit, so gut :-)\\ Wir haben es nun geschafft unseren ersten Assembler-Code in ein ausführbares Programm umzuwandeln. Dieses Kapitel dient hauptsächlich dem Testen der Entwicklungs-Umgebung. Die für das Verständnis des Codes notwendigen Mechanismen werden in den folgenden Kapiteln erklärt.