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