Tutorium 1

Reading time ~7 minutes

Meine Tutorien

Ich betreue dieses Semester die Tutorien Mittwoch 8:15 Uhr und Donnerstag 12:00 Uhr jeweils im K44. Beginn ist c.t. also 8:30 Uhr bzw. 12:15 Uhr.

0 - Organisatorisches

  • Veröffentlichung der Übungsbögen Freitags
  • Bearbeitungszeit der Übungsbögen 14 Tage
  • Abgabe der Übungsbögen bis spätestens Freitags vor der Vorlesung um 10:15 Uhr
  • Abgabeformat KVV: Texte als PDF und Quellcode als source Datei (also datei.c oder datei.asm). Keine kompremierten Dateien.
  • Abgabeformat für die Abgabe im Fach: Namen aller Übungsgruppenteilnehmer und des Tutors (also mein Name) und Nummer des Aufgabenzettels auf der Frontseite, die wichtigsten Zeilen des Quellcodes sind mit auszudrucken, die Blätter sind zu tackern
  • Es sind n-2 Übungszettel zu bestehen
  • Ein Zettel gilt als bestanden wenn mindestens 3 der maximal 6 Punkte erreicht wurden und bei jeder der zwei korrigierten Aufgaben minimal 1 Punkt erreicht wurde.
  • Jeder Teilnehmer muss mindestens 1x Vorrechnen
  • 2er Gruppen
  • Quellen und Zitate müssen angegeben werden
  • Anwesenheitspflicht an n-2 Terminen
  • Passive Teilnahme: Anwesenheit
  • Aktive Teilnahme: Vorrechnen + Übungszettel

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
  • 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       ; initialisierter Speicher
section .bss        ; uninitialisierter Speicher

section .text       ; code

global addit
addit:
    ;STACK SAVE
    push rbp
    mov  rbp, rsp	;neuer Stackframe

    ;CODE
    mov  rax, rdi	;param1 in rax
    add  rax, rsi	;additionsergebnis in rax

    ;STACK RESTORE
    pop  rbp
    ret

Addition aus C aufrufen

#include <stdio.h>

extern 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