Intro

Reading time ~6 minutes

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

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

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)); }
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

VII - Materialien