diff --git a/20210517/Makefile b/20210517/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d080ca3fa6821afe1e4075dea4f6463eda663f02
--- /dev/null
+++ b/20210517/Makefile
@@ -0,0 +1,11 @@
+%.s: %.c
+	avr-gcc -Wall -Os -mmcu=atmega328p $< -S -o $@
+
+%.elf: %.c
+	avr-gcc -Wall -Os -mmcu=atmega328p $< -o $@
+
+%.hex: %.elf
+	avr-objcopy -O ihex $< $@
+
+download:
+	./download.sh
diff --git a/20210517/add-1.c b/20210517/add-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..452ff85a9deb28a7b029c1ae74767b68138bc36f
--- /dev/null
+++ b/20210517/add-1.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+int main (void)
+{
+  int a = 7;
+  int b = 13;
+  int c = a + b;
+  printf ("%d + %d = %d\n", a, b, c);
+  return 0;
+}
diff --git a/20210517/add-1.s b/20210517/add-1.s
new file mode 100644
index 0000000000000000000000000000000000000000..38fb9c6267b6a8c3b79ad367b091b5be7bf96cc0
--- /dev/null
+++ b/20210517/add-1.s
@@ -0,0 +1,28 @@
+	.file	"add-1.c"
+	.text
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.LC0:
+	.string	"%d + %d = %d\n"
+	.text
+	.globl	main
+	.type	main, @function
+main:
+.LFB11:
+	.cfi_startproc
+	subq	$8, %rsp
+	.cfi_def_cfa_offset 16
+	movl	$20, %ecx
+	movl	$13, %edx
+	movl	$7, %esi
+	leaq	.LC0(%rip), %rdi
+	movl	$0, %eax
+	call	printf@PLT
+	movl	$0, %eax
+	addq	$8, %rsp
+	.cfi_def_cfa_offset 8
+	ret
+	.cfi_endproc
+.LFE11:
+	.size	main, .-main
+	.ident	"GCC: (Debian 8.3.0-6) 8.3.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/20210517/blink-2.c b/20210517/blink-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..dcfd15bff350499a4ab3fdfb5b98542f895eb25e
--- /dev/null
+++ b/20210517/blink-2.c
@@ -0,0 +1,17 @@
+#include <avr/io.h>
+
+#define F_CPU 16000000l
+#include <util/delay.h>
+
+int main (void)
+{
+  DDRD = 0x40;
+  while (1)
+    {
+      PORTD |= 0x40;
+      _delay_ms (500);
+      PORTD &= ~0x40;
+      _delay_ms (500);
+    }
+  return 0;
+}
diff --git a/20210517/blink-2.hex b/20210517/blink-2.hex
new file mode 100644
index 0000000000000000000000000000000000000000..cb9e60c617cdfd780c92396a433c84dfd08fc043
--- /dev/null
+++ b/20210517/blink-2.hex
@@ -0,0 +1,12 @@
+:100000000C9434000C943E000C943E000C943E0082
+:100010000C943E000C943E000C943E000C943E0068
+:100020000C943E000C943E000C943E000C943E0058
+:100030000C943E000C943E000C943E000C943E0048
+:100040000C943E000C943E000C943E000C943E0038
+:100050000C943E000C943E000C943E000C943E0028
+:100060000C943E000C943E0011241FBECFEFD8E04C
+:10007000DEBFCDBF0E9440000C9451000C940000E4
+:1000800080E48AB98BB990E42FEF34E38CE02150FF
+:1000900030408040E1F700C000008BB189278BB968
+:0600A000F3CFF894FFCF3E
+:00000001FF
diff --git a/20210517/blink-2.s b/20210517/blink-2.s
new file mode 100644
index 0000000000000000000000000000000000000000..105cd5b348b6dd3965d92c2f1890af460e407121
--- /dev/null
+++ b/20210517/blink-2.s
@@ -0,0 +1,40 @@
+	.file	"blink-2.c"
+__SP_H__ = 0x3e
+__SP_L__ = 0x3d
+__SREG__ = 0x3f
+__tmp_reg__ = 0
+__zero_reg__ = 1
+	.section	.text.startup,"ax",@progbits
+.global	main
+	.type	main, @function
+main:
+/* prologue: function */
+/* frame size = 0 */
+/* stack size = 0 */
+.L__stack_usage = 0
+	ldi r24,lo8(64)
+	out 0xa,r24
+.L2:
+	sbi 0xb,6
+	ldi r18,lo8(1599999)
+	ldi r24,hi8(1599999)
+	ldi r25,hlo8(1599999)
+1:	subi r18,1
+	sbci r24,0
+	sbci r25,0
+	brne 1b
+	rjmp .
+	nop
+	cbi 0xb,6
+	ldi r18,lo8(1599999)
+	ldi r24,hi8(1599999)
+	ldi r25,hlo8(1599999)
+1:	subi r18,1
+	sbci r24,0
+	sbci r25,0
+	brne 1b
+	rjmp .
+	nop
+	rjmp .L2
+	.size	main, .-main
+	.ident	"GCC: (GNU) 5.4.0"
diff --git a/20210517/blink-2s.hex b/20210517/blink-2s.hex
new file mode 100644
index 0000000000000000000000000000000000000000..02835334a239906400985acea0b78c273dac4e8c
--- /dev/null
+++ b/20210517/blink-2s.hex
@@ -0,0 +1,13 @@
+:100000000C9434000C943E000C943E000C943E0082
+:100010000C943E000C943E000C943E000C943E0068
+:100020000C943E000C943E000C943E000C943E0058
+:100030000C943E000C943E000C943E000C943E0048
+:100040000C943E000C943E000C943E000C943E0038
+:100050000C943E000C943E000C943E000C943E0028
+:100060000C943E000C943E0011241FBECFEFD8E04C
+:10007000DEBFCDBF0E9440000C945E000C940000D7
+:10008000EAE2F0E020E42083E395208120642083ED
+:100090007FEF89E698E1715080409040E1F70000E1
+:1000A000000020812F7B20837FEF84E39CE0715050
+:1000B00080409040E1F700000000E7CFF894FFCFC8
+:00000001FF
diff --git a/20210517/blink-2s.s b/20210517/blink-2s.s
new file mode 100644
index 0000000000000000000000000000000000000000..04639ea652bbc72986ff29d734c48685501752b8
--- /dev/null
+++ b/20210517/blink-2s.s
@@ -0,0 +1,57 @@
+	.text                     ; "Dies ist ein Programm."
+
+.global	main                      ; Exportiere das Symbol "main"
+
+                                  ; DDRD = 0x40
+
+main:	ldi r30,0x2a              ; lade 0x2a in das Register r30
+	ldi r31,0x00              ; lade 0x00 in das Register r31
+	ldi r18,0x40              ; lade 0x40 in das Register r18
+        st Z,r18                  ; speichere r18 dort, wohin das Z-Register zeigt
+                                  ;   (Z-Register = Kombination von r30 und r31, hier 0x002a)
+
+        inc r30                   ; inkrementiere r30; danach ist Z = 0x002b
+
+loop:	ld r18,Z                  ; Speicherzelle in Register laden
+        ori r18,0x40              ; Und-Verknüpfung mit dem Binärmuster 0100 0000
+                                  ;   (Bit auf 1 setzen: Schalte LED an)
+        st Z,r18                  ; Register in Speicherzelle schreiben
+
+                                  ; 0.5 Sekunden warten
+
+	ldi r23,lo8(1599999)      ; Lade die untersten 8 Bit der Zahl 1599999 in r23
+	ldi r24,hi8(1599999)      ; Lade die mittleren 8 Bit der Zahl 1599999 in r24
+	ldi r25,hlo8(1599999)     ; Lade die obersten 8 Bit der Zahl 1599999 in r25
+wait1:	subi r23,1                ; Subtrahiere die Integer 1 von r23
+	sbci r24,0                ; Subtrahiere die Integer 0 mit Carry (Übertrag) von r24
+	sbci r25,0                ; Subtrahiere die Integer 0 mit Carry (Übertrag) von r25
+                                  ; --> Subtrahiere 1 von der Zahl (r25/r24/r23) (anfangs 1599999)
+	brne wait1                ; "branch if not equal" - Sprung, wenn nicht 0
+                                  ; Ausführungsdauer: je 1 Taktzyklus für subi/sbci
+                                  ;  + 2 Taktzyklen für brne = 5 Taktzyklen pro Durchlauf
+                                  ;  Schleife = 1599999 Durchläufe
+                                  ;           = 7999995 Taktzyklen (bei 5 Takten pro Durchlauf)
+                                  ;           = 0.4999996875 Sekunden (bei 16 MHz Taktfrequenz)
+                                  ; Zusammen mit den 3 Taktzyklen für die 3 ldi-Befehle
+                                  ; ergibt sich ziemlich genau 0.5 Sekunden.
+        nop
+        nop                       ; Zusammen mit 2 nops je 1 Taktzyklus: genau 0.5 Sekunden
+
+        ld r18,Z                  ; Speicherzelle in Register laden
+        andi r18,0xbf             ; Und-Verknüpfung mit dem Binärmuster 1011 1111
+                                  ;   (Bit auf 0 setzen: Schalte LED aus)
+        st Z,r18                  ; Register in Speicherzelle schreiben
+
+                                  ; 0.5 Sekunden warten
+
+	ldi r23,lo8(799999)
+	ldi r24,hi8(799999)
+	ldi r25,hlo8(799999)
+wait2:	subi r23,1
+	sbci r24,0
+	sbci r25,0
+	brne wait2
+        nop
+        nop
+
+	rjmp loop                 ; Endlosschleife
diff --git a/20210517/download.sh b/20210517/download.sh
new file mode 100755
index 0000000000000000000000000000000000000000..770c3b5dca74ac09778be055c9d6f5adb0df293b
--- /dev/null
+++ b/20210517/download.sh
@@ -0,0 +1,3 @@
+port=$(ls -rt /dev/ttyACM* | tail -1)
+echo avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1)
+avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1) 2>/dev/null
diff --git a/20210517/logo-hochschule-bochum-cvh-text-v2.pdf b/20210517/logo-hochschule-bochum-cvh-text-v2.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8
--- /dev/null
+++ b/20210517/logo-hochschule-bochum-cvh-text-v2.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20210517/logo-hochschule-bochum.pdf b/20210517/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20210517/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20210517/pgslides.sty b/20210517/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20210517/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20210517/rtech-20210517.pdf b/20210517/rtech-20210517.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a54037f3f50e4a441e8699e99bc973f1d93c7650
Binary files /dev/null and b/20210517/rtech-20210517.pdf differ
diff --git a/20210517/rtech-20210517.tex b/20210517/rtech-20210517.tex
new file mode 100644
index 0000000000000000000000000000000000000000..7747b6b9ece231c931027db35de8ae87b32da3ab
--- /dev/null
+++ b/20210517/rtech-20210517.tex
@@ -0,0 +1,601 @@
+% rtech-20210517.pdf - Lecture Slides on Computer Technology
+% Copyright (C) 2012, 2013, 2014, 2021  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+% README: Programmieren in Assembler: Arduino, Krieg der Kerne
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+
+\lstdefinestyle{asm}{basicstyle=\color{structure},
+                     language={},
+                     gobble=4}
+
+\title{Rechnertechnik}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{17.\ Mai 2021}
+
+\begin{document}
+
+\maketitleframe
+
+\sectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \showsectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+    \item[\textbf{2}] \textbf{Vom Schaltkreis zum Computer}
+      \begin{itemize}
+        \item[2.1] Logik-Schaltkreise
+        \item[2.2] Binärdarstellung von Zahlen
+        \item[2.3] Vom Logik-Schaltkreis zum Addierer
+        \item[2.4] Negative Zahlen
+        \item[2.5] Vom Addierer zum Computer
+        \item[2.6] Computer-Sprachen
+        \color{orange}
+        \item[2.7] Programmieren in Assembler
+        \color{red}
+        \item[2.8] Struktur von Assembler-Programmen
+      \end{itemize}
+    \color{gray}
+    \item[\textbf{3}] \textbf{Architekturmerkmale von Prozessoren}
+    \item[\textbf{4}] \textbf{Der CPU-Stack}
+%    \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
+%    \item[\textbf{6}] \textbf{Anwender-Software}
+%    \item[\textbf{7}] \textbf{Bus-Systeme}
+%    \item[\textbf{8}] \textbf{Pipelining}
+    \item[\textbf{\dots\hspace{-0.75em}}]
+%    \item[\textbf{9}] \textbf{Ausblick}
+  \end{itemize}
+
+\end{frame}
+
+\setcounter{section}{1}
+\section{Vom Schaltkreis zum Computer}
+\setcounter{subsection}{6}
+\subsection{Programmieren in Assembler}
+
+\begin{frame}
+
+  \showsubsection
+
+  Beispiel: PC, 1980er bis 1990er Jahre
+  \begin{itemize}
+    \item
+      Prozessor: Intel 8086
+    \item
+      Takt: 4,77--100\,MHz
+  \end{itemize}
+  Anwendung von Assembler: zeitkritische Programmteile,\\
+  z.\,B.\ Text- und Grafikausgabe
+
+%  \begin{onlyenv}<1>
+%    \begin{center}
+%      \vspace*{-0.15cm}
+%      \includegraphics[width=9.8cm,trim={0cm 0cm 0cm 0.8cm},clip]{hello-world-maschinensprache.png}
+%      \vspace*{-10cm}
+%    \end{center}
+%  \end{onlyenv}
+%
+%  \pause
+  \bigskip
+
+  Beispiel: Arduino Uno
+  \begin{itemize}
+    \item
+      Prozessor: ATmega 328p
+    \item
+      Takt: 16\,MHz
+  \end{itemize}
+  Anwendung von Assembler: zeitkritische Programmteile,\\
+  z.\,B.\ Mikrosekunden-Timing
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Beispiel: Arduino Uno
+  \begin{itemize}
+    \item
+      Prozessor: ATmega 328p
+    \item
+      Takt: 16\,MHz
+  \end{itemize}
+  Anwendung von Assembler: zeitkritische Programmteile,\\
+  z.\,B.\ Mikrosekunden-Timing
+
+  \bigskip
+
+  Cross-Entwicklung
+  \begin{itemize}
+    \item
+      Programmieren auf PC
+    \item
+      Compilieren auf PC:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avr-gcc -Wall -Os -mmcu=atmega328p blink.c -o blink.elf
+      \end{lstlisting}
+    \item
+      Speicherabbild auf PC erstellen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avr-objcopy -O ihex blink.elf blink.hex
+      \end{lstlisting}
+    \item
+      Speicherabbild auf den Mikrocontroller herunterladen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avrdude -P /dev/ttyACM0 -c arduino -p m328p \
+                -U flash:w:blink.hex
+      \end{lstlisting}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Cross-Entwicklung
+  \begin{itemize}
+    \item
+      Programmieren auf PC
+    \item
+      Compilieren auf PC:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avr-gcc -Wall -Os -mmcu=atmega328p blink.c -o blink.elf
+      \end{lstlisting}
+    \item
+      Speicherabbild auf PC erstellen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avr-objcopy -O ihex blink.elf blink.hex
+      \end{lstlisting}
+    \item
+      Speicherabbild auf den Mikrocontroller herunterladen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avrdude -P /dev/ttyACM0 -c arduino -p m328p \
+                -U flash:w:blink.hex
+      \end{lstlisting}
+    \medskip
+    \item
+      Präprozessor auf PC:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avr-gcc -Wall -Os -mmcu=atmega328p blink.c \
+                -E -o blink.E
+      \end{lstlisting}
+    \item
+      Compilieren auf PC, Assembler-Quelltext erzeugen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        avr-gcc -Wall -Os -mmcu=atmega328p blink.c -S
+      \end{lstlisting}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+  
+  C nach Assembler übersetzen:
+  \begin{lstlisting}[style=terminal]
+    $ ¡gcc -S pruzzel.c¿
+  \end{lstlisting}
+  erzeugt \file{pruzzel.s},\\
+  Assembler für den Standard-Prozessor\\
+  (hier: 64-Bit-AMD-Architektur -- amd64).
+
+  \bigskip
+%  \pause
+  
+  \begin{lstlisting}[style=terminal]
+    $ ¡avr-gcc -S pruzzel.c¿
+  \end{lstlisting}
+  erzeugt \file{pruzzel.s},\\
+  Assembler für 8-Bit-Atmel-AVR-Prozessoren.
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  C-Programme auf Assembler-Ebene debuggen:
+  \begin{lstlisting}[style=terminal]
+    $ ¡gcc -g pruzzel.c -o pruzzel¿
+    $ ¡gdb -tui ./pruzzel¿
+    (gdb) ¡break main¿
+    (gdb) ¡run¿
+    (gdb) ¡layout split¿
+    (gdb) ¡nexti¿
+  \end{lstlisting}
+
+\end{frame}
+
+\subsection{Struktur von Assembler-Programmen}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Beispiel 1: IA-32-Assembler \only<3>{-- Adressierungsarten}
+
+  \vspace{2cm}
+
+  \begin{lstlisting}
+    addl    $1, %eax
+    movb    %al, b
+    cmpb    (%ebx), %dl
+    jbe     .L2
+  \end{lstlisting}
+
+  \begin{onlyenv}<2-3>
+    \begin{picture}(0,0)
+      \color{red}
+      \put(0.4,2.8){\vector(0,-1){0.7}}
+      \put(0.4,2.9){\makebox(0,0)[b]{Befehl}}
+      \only<2>{%
+        \put(1.4,2.8){\vector(-1,-1){0.7}}
+        \put(2.3,2.9){\makebox(0,0)[b]{Größen-Suffix}}}
+      \only<3>{%
+        \put(1.4,2.8){\vector(-1,-2){0.35}}
+        \put(1.4,2.8){\vector(1,-2){0.35}}
+        \put(2.0,2.9){\makebox(0,0)[b]{Operanden}}}
+    \end{picture}
+  \end{onlyenv}
+  \begin{onlyenv}<4>
+    \begin{picture}(0,0)
+      \color{red}
+      \put(1.4,2.8){\vector(-1,-2){0.35}}
+      \put(2.0,2.9){\makebox(0,0)[b]{unmittelbar}}
+      \put(3.0,1.8){\vector(-1,0){0.7}}
+      \put(3.1,1.8){\makebox(0,0)[l]{Register}}
+      \put(4.8,1.4){\vector(-1,0){2.7}}
+      \put(4.9,1.4){\makebox(0,0)[l]{Speicher (absolut)}}
+      \put(2.3,-0.0){\vector(-1,1){0.7}}
+      \put(3.5,-0.1){\makebox(0,0)[t]{indirekt mit Register}}
+      \put(0.8,-0.6){\vector(0,1){0.9}}
+      \put(0.0,-0.7){\makebox(0,0)[tl]{Speicher (relativ)}}
+    \end{picture}
+  \end{onlyenv}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Beispiel 2: Redcode (ICWS '88)\pause\ -- Core War[s] (Krieg der Kerne)\\
+  Virtuelle Maschine: Memory Array Redcode Simulator (MARS)
+
+  \pause
+  \bigskip
+
+  \begin{minipage}[t]{7.2cm}
+    Instruktionen:\\[\smallskipamount]
+    \lstinline{dat B} -- Daten \only<4->{-- "`Du hast verloren!"'}\\
+    \lstinline{mov A, B} -- kopiere A nach B\\
+    \lstinline{add A, B} -- addiere A zu B\\
+    \lstinline{sub A, B} -- subtrahiere A von B\\
+    \lstinline{jmp A} -- unbedingter Sprung nach A\\
+    \lstinline{jmz A, B} -- Sprung nach A, wenn B $=$ 0\\
+    \lstinline{jmn A, B} -- Sprung nach A, wenn B $\ne$ 0\\
+    \lstinline{djn A, B} -- "`decrement and jump if not zero"'\\
+    \lstinline{cmp A, B} -- "`compare"': überspringe, falls gleich\\
+    \lstinline{spl A} -- "`split"': Programm verzweigen
+  \end{minipage}\hfill
+  \begin{minipage}[t]{4.7cm}
+    Adressierungsarten:\\[\smallskipamount]
+    grundsätzlich: Speicher relativ\\[\smallskipamount]
+    \lstinline{#} -- unmittelbar\\
+    \lstinline{$} -- direkt\\
+    \lstinline{@} -- indirekt\\
+    \lstinline{<} -- indirekt mit Prä-Dekrement
+
+    \pause[5]
+    \bigskip
+    Programm "`Nothing"':
+    \begin{lstlisting}[gobble=6]
+      jmp 0
+    \end{lstlisting}
+    \pause
+    \bigskip
+    Programm "`Knirps"':
+    \begin{lstlisting}[gobble=6]
+      mov 0, 1
+    \end{lstlisting}
+
+  \end{minipage}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Unbedingte Verzweigung
+
+  Beispiel: Endlosschleife von "`Dwarf"'
+
+  \begin{minipage}[t]{1.2cm}
+    \begin{lstlisting}[style=asm,gobble=6]
+      bomb
+      start
+    \end{lstlisting}
+  \end{minipage}%
+  \begin{minipage}[t]{3cm}
+    \begin{lstlisting}[style=asm,gobble=6]
+      dat #0
+      add #4, bomb
+      mov bomb, @bomb
+      jmp start
+      end start
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{3.9cm}
+    \small
+    \bigskip
+    Instruktionen:\\[\smallskipamount]
+    \lstinline{dat B}\\
+    \lstinline{mov A, B}\\
+    \lstinline{add A, B}\\
+    \lstinline{sub A, B}\\
+    \lstinline{jmp A}\\
+    \lstinline{jmz A, B} -- "`jump if zero"'\\
+    \lstinline{jmn A, B} -- "`if not zero"'\\
+    \lstinline{djn A, B} -- "`dec. \& jmn"'\\
+    \lstinline{cmp A, B} -- vgl.\ \& überspr.\\
+    \lstinline{spl A} -- verzweigen
+  \end{minipage}%
+  \begin{minipage}[t]{2.7cm}
+    \small
+    \bigskip
+    Adressierungsarten:\\[\medskipamount]
+    grundsätzlich:\\
+    Speicher relativ\\[\medskipamount]
+    \lstinline{#} -- unmittelbar\\[\smallskipamount]
+    \lstinline{$} -- direkt\\[\smallskipamount]
+    \lstinline{@} -- indirekt\\[\smallskipamount]
+    \lstinline{<} -- indirekt mit\\
+    \hspace*{0.52cm}Prä-Decrement
+  \end{minipage}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \alt<2->{Mehrere Threads}{Bedingte Verzweigung}
+
+  Beispiel: \alt<2->{Multithreading}{Kopierschleife} von "`Mice"'
+
+  \begin{minipage}[t]{1.2cm}
+    \begin{lstlisting}[style=asm,gobble=6]
+      ptr
+      start
+      loop
+
+
+
+
+      dest
+
+    \end{lstlisting}
+  \end{minipage}%
+  \begin{minipage}[t]{3cm}
+    \begin{lstlisting}[style=asm,gobble=6]
+      dat              #0
+      mov     #12,     ptr
+      mov     @ptr,    <dest
+      djn     loop,    ptr
+      spl     @dest
+      add     #653,    dest
+      jmz     start,   ptr
+      dat              #833
+      end start
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{3.9cm}
+    \small
+    \bigskip
+    Instruktionen:\\[\smallskipamount]
+    \lstinline{dat B}\\
+    \lstinline{mov A, B}\\
+    \lstinline{add A, B}\\
+    \lstinline{sub A, B}\\
+    \lstinline{jmp A}\\
+    \lstinline{jmz A, B} -- "`jump if zero"'\\
+    \lstinline{jmn A, B} -- "`if not zero"'\\
+    \lstinline{djn A, B} -- "`dec. \& jmn"'\\
+    \lstinline{cmp A, B} -- vgl.\ \& überspr.\\
+    \lstinline{spl A} -- verzweigen
+  \end{minipage}%
+  \begin{minipage}[t]{2.7cm}
+    \small
+    \bigskip
+    Adressierungsarten:\\[\medskipamount]
+    grundsätzlich:\\
+    Speicher relativ\\[\medskipamount]
+    \lstinline{#} -- unmittelbar\\[\smallskipamount]
+    \lstinline{$} -- direkt\\[\smallskipamount]
+    \lstinline{@} -- indirekt\\[\smallskipamount]
+    \lstinline{<} -- indirekt mit\\
+    \hspace*{0.52cm}Prä-Decrement
+  \end{minipage}
+
+\end{frame}
+
+\iffalse
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Selbstmodifizierender Code
+
+  Beispiel: Selbsterkennung von "`Fini"'
+
+  \begin{minipage}[t]{1.2cm}
+    \begin{lstlisting}[language={},gobble=6]
+      num
+      start
+
+      pos
+
+    \end{lstlisting}
+  \end{minipage}%
+  \begin{minipage}[t]{0.9cm}
+    \begin{lstlisting}[language={},gobble=6]
+      dat #-2
+      mov num, <pos
+      jmp start
+      dat
+      end start
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{3.9cm}
+    \small
+    \bigskip
+    Instruktionen:\\[\smallskipamount]
+    \lstinline{dat B}\\
+    \lstinline{mov A, B}\\
+    \lstinline{add A, B}\\
+    \lstinline{sub A, B}\\
+    \lstinline{jmp A}\\
+    \lstinline{jmz A, B} -- "`jump if zero"'\\
+    \lstinline{jmn A, B} -- "`if not zero"'\\
+    \lstinline{djn A, B} -- "`dec. \& jmn"'\\
+    \lstinline{cmp A, B} -- vgl.\ \& überspr.\\
+    \lstinline{spl A} -- verzweigen
+  \end{minipage}%
+  \begin{minipage}[t]{2.7cm}
+    \small
+    \bigskip
+    Adressierungsarten:\\[\medskipamount]
+    grundsätzlich:\\
+    Speicher relativ\\[\medskipamount]
+    \lstinline{#} -- unmittelbar\\[\smallskipamount]
+    \lstinline{$} -- direkt\\[\smallskipamount]
+    \lstinline{@} -- indirekt\\[\smallskipamount]
+    \lstinline{<} -- indirekt mit\\
+    \hspace*{0.52cm}Prä-Decrement
+  \end{minipage}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \strut
+ 
+  \strut\makebox(0,0)[bl]{\large\color{structure}\textbf{Praktikumsversuch}}
+
+  \begin{minipage}[t]{5cm}
+    \medskip
+    Schreiben Sie ein\\
+    Redcode-Programm,\\
+    das die Gegner\\
+    \file{Nothing}, \file{Knirps}\\
+    und \file{Mice} besiegt.
+
+    \medskip
+
+    ICWS-88-Standard,\\
+    max.\ 64 Prozesse,\\
+    Speichergröße zufällig
+
+    \medskip
+
+    Teams bis zu 3 Personen\\
+    sind zulässig.
+  \end{minipage}\hfill
+  \begin{minipage}[t]{3.9cm}
+    \small
+    \bigskip
+    Instruktionen:\\[\smallskipamount]
+    \lstinline{dat B}\\
+    \lstinline{mov A, B}\\
+    \lstinline{add A, B}\\
+    \lstinline{sub A, B}\\
+    \lstinline{jmp A}\\
+    \lstinline{jmz A, B} -- "`jump if zero"'\\
+    \lstinline{jmn A, B} -- "`if not zero"'\\
+    \lstinline{djn A, B} -- "`dec. \& jmn"'\\
+    \lstinline{cmp A, B} -- vgl.\ \& überspr.\\
+    \lstinline{spl A} -- verzweigen
+  \end{minipage}%
+  \begin{minipage}[t]{2.7cm}
+    \small
+    \bigskip
+    Adressierungsarten:\\[\medskipamount]
+    grundsätzlich:\\
+    Speicher relativ\\[\medskipamount]
+    \lstinline{#} -- unmittelbar\\[\smallskipamount]
+    \lstinline{$} -- direkt\\[\smallskipamount]
+    \lstinline{@} -- indirekt\\[\smallskipamount]
+    \lstinline{<} -- indirekt mit\\
+    \hspace*{0.52cm}Prä-Decrement
+  \end{minipage}
+
+\end{frame}
+
+\fi
+
+\sectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \showsectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+    \item[\textbf{2}] \textbf{Vom Schaltkreis zum Computer}
+      \begin{itemize}
+        \item[2.1] Logik-Schaltkreise
+        \item[2.2] Binärdarstellung von Zahlen
+        \item[2.3] Vom Logik-Schaltkreis zum Addierer
+        \item[2.4] Negative Zahlen
+        \item[2.5] Vom Addierer zum Computer
+        \item[2.6] Computer-Sprachen
+        \color{medgreen}
+        \item[2.7] Programmieren in Assembler
+        \color{orange}
+        \item[2.8] Struktur von Assembler-Programmen
+      \end{itemize}
+    \color{gray}
+    \item[\textbf{3}] \textbf{Architekturmerkmale von Prozessoren}
+    \item[\textbf{4}] \textbf{Der CPU-Stack}
+%    \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
+%    \item[\textbf{6}] \textbf{Anwender-Software}
+%    \item[\textbf{7}] \textbf{Bus-Systeme}
+%    \item[\textbf{8}] \textbf{Pipelining}
+    \item[\textbf{\dots\hspace{-0.75em}}]
+%    \item[\textbf{9}] \textbf{Ausblick}
+  \end{itemize}
+
+\end{frame}
+
+\end{document}