Einführung in Shell, NASM und GCC, so wie Wahl eines Editors und Schreiben eines ersten Programms
I - Shell
Eine Shell ist ein Kommandozeileninterpreter.
I.1 - Drei beliebte Linux-Shells
I.2 - Einige Anwendungen
man
: show man page or manual page (eg: man man)cd
: change directory (eg: cd ~)mkdir
: make directory (eg: mkdir ~/proinf4)cat
: read, concatinate and create files (eg: cat sometext.txt, cat text.txt moretext.txt, cat > mytext.txt)rm
: remove file (eg: rm sometext.txt, rm -r ~/proinf4)cp
: copy file (eg: cp ~/proinf4/text.txt ~/text.txt)mv
: move file (eg: mv ~/proinf4/text.txt ~/text.txt)nano
: open file in commandline based editor nano (eg: nano text.txt)
II - NASM
Ein Assembler erstellt Opcode indem er Kombinationen von Mnemonics und Syntax für Operationen und Adressierunsmodi in ihre numerischen Äquivalente übersetzt. Er übersetzt also zwischen Assembler- und Maschinensprache. Netwide Assembler (NASM) eignet sich besonders gut für pädagogische Zwecke.
III - GCC
GNU Compiler Collection (früher GNU C Compiler - GCC), ist ein Compiler, Linker und noch einiges mehr. Wir werden jedoch nur diese beiden Komponenten nutzen.
IV - Produzierendes System und Editor
Viele Studierende vernachlässigen diesen Punkt. Darunter leidet der Spaß am Programmieren.
IV.1 - Betriebssystem
Es empfiehlt sich ein Linux OS. Auch BSD Systeme sind eine gute Wahl, jedoch mangelt es diesen leider an Umfang.
Von mir empfohlene Linux Distributionen
- Linux Mint: Out of the Box, ähnelt Windows
- Ubuntu: Out of the Box, ähnelt OSX
- Void Linux: für Ambitionierte, nahe am BSD Modell
- Funtoo: für sehr Ambitionierte, aber auch am spaßigsten.
IV.2 - Oberfläche
Die Anforderungen an die Nutzeroberfläche eines Produzierenden Systems unterscheiden sich von denen eines Spiele- oder Alltagscomputers. Oft werden mehrere Programme gleichzeitig benötigt z.B. ein Browser für Recherche (oder Musik ;)), ein Editor oder eine IDE für’s Programmieren, eine Konsole für Testzwecke, etc. Diese Anwendungen sollten schnell und gut erreichbar sein, so dass das Wechseln selbst den Workflow nicht behindert. Andere Anforderungen wie z.B ein schönes Hintergrundlid oder ein möglichst großes Angebot an vorinstallierter Software rücken in den Hintergrund. Vielen ist auch die Sicherheit ihres Systems wichtig, Grade in Hinblick auf Wirtschaft oder Bachelor/Master/Doktor Arbeiten. Meine persönliche Empfelung ist der i3-WindowManager.
IV.3 - Editor
Da für diesen Kurs keine IDEs benötigt werden, beschränke ich mich auf Editoren. Da man beim Programmieren recht viel Zeit mit seinem Editor verbringt, ist es Hilfreich einen zu verwenden, der das Arbeiten erleichtert (Stichwort Autovervollständigung).
Beliebte Editoren
- ATOM: Open Source
- Sublime: Closed Source, zahlen oder Pop Up
- EMACS: Open Source
- VIM: Open Source
- NEOVIM: Open Source
V - Arbeiten unter Linux
Ihr habt mehrere Möglichkeiten unter Linux zu arbeiten.
- Eigenes Linux System
- Meine Empfehlung. Wir helfen auch gerne.
- Ihr lernt nebenbei auch viel über UNIX
- Virtuelle Maschine
- Sollte nicht auf schwachen Computern genutzt werden (z.B. Netbooks)
- Ihr lernt nebenbei etwas über VMs und UNIX
- Linux Poolrechner
- helfen euch nicht zu Hause
- Remote arbeiten auf Andorra
- Notlösung mit PuTTY und WinSCP
- FU Terminalserver
VI - Ein erstes NASM Programm
Ein Programm in NASM, dass zwei Zahlen addiert und deren Summe zurück gibt.
Addition in NASM
section .data
section .text
global addit
addit:
;CODE
mov rax, rdi ;param1 in rax
mov rbx, rsi ;param2 in rbx
sub rax, rbx ;additionsergebnis in rax
ret
Addition aus C aufrufen
#include <stdio.h>
extern unsigned int addit(int, int);
int main(void)
{ printf("%d\n", addit(100, 78)); }
Assemble and Link
nasm -f elf64 addit.asm -o addit.o
gcc -std=c99 addit.c addit.o -o addit
Was ist da Passiert?
- Mnemonics
- Register
- Calling Convention
- Return Value
- Einsprungpunkt