From 6b6e2af669902e422c8703a094d811befb66a94e Mon Sep 17 00:00:00 2001
From: Manuel Traut <manut@mecka.net>
Date: Tue, 8 Feb 2011 00:11:08 +0100
Subject: updated pres_cpu-arch - still some things to do..

Signed-off-by: Manuel Traut <manut@mecka.net>
---
 basics/cpu-arch/pres_cpu-arch.tex | 149 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 143 insertions(+), 6 deletions(-)

(limited to 'basics/cpu-arch/pres_cpu-arch.tex')

diff --git a/basics/cpu-arch/pres_cpu-arch.tex b/basics/cpu-arch/pres_cpu-arch.tex
index 805dca1..70f2bcc 100644
--- a/basics/cpu-arch/pres_cpu-arch.tex
+++ b/basics/cpu-arch/pres_cpu-arch.tex
@@ -1,8 +1,8 @@
 \input{configpres}
 
-\subsection{CPU Architekturen}
+\subsection{Prozessor Architekturen}
 
-\title{\lq CPU Architekturen\rq}
+\title{\lq Prozessor Architekturen\rq}
 \maketitle
 
 \begin{frame}
@@ -10,15 +10,143 @@
 \tableofcontents
 \end{frame}
 
+\subsubsection{Prozessoren}
+\begin{frame}
+\frametitle{Aufbau}
+Register - Rechenwerk - Befehlsdekoder - Bus - Cache (optional)
+
+\begin{description}
+\item[Register] Konfiguration, Zwischenspeicher, Operanden, Stack, I/O
+\item[Rechenwerk] mind. eine ALU (Arithmetic Logical Unit: ADD, NOT, AND, \dots)
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{Aufbau}
+Register - Rechenwerk - Befehlsdekoder - Bus - Cache (optional)
+
+\begin{description}
+\item[Befehlsdekoder]
+	\begin{itemize}
+		\item FETCH - Befehl (OPCODE) aus RAM / ROM laden 
+		  (Prefetch - laden mehrere Befehle in ein Prefetch Register)
+		\item DECODE - OPCODE in ALU-Schaltinstruktionen wandeln
+		\item FETCH - Operanden (OPERANDS) aus RAM / ROM laden
+		\item EXECUTE
+		\item WRITE BACK - schreiben des Ergebnises in RAM / ROM (OPCOUNTER++)
+	\end{itemize}
+\item[Bus] Adressbus (zentraler Adressdecoder -> Chip Select), Datenbus
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{Aufbau}
+Register - Rechenwerk - Befehlsdekoder - Bus - Cache (optional)
+
+\begin{description}
+\item[Cache] beinhaltet zuletzt verwendete Daten
+	\begin{itemize}
+		\item L1 im Kern / wenige KB gross / am Schnellsten abrufbar
+		\item L2 nicht im Kern / wenige MB gross
+		\item L3 von allen Kernen geteilt / einige MB gross
+	\end{itemize}
+\end{description}
+\end{frame}
+
+\subsubsection{OPCODE vs Assembler}
+\begin{frame}[containsverbatim]
+\frametitle{OPCODE vs Assembler}
+\begin{description}
+\item[OPCODES] sind immer Prozessorspezifisch
+\item[OPCODE] eindeutige Nummer eines Befehls
+\item[Befehlssatz] Summe aller OPCODES eines Prozessors
+\item[Mnemonic] lesbare Abk. eines OPCODES -> Assemblerbefehl
+\end{description}
+
+Beispiel 8086:
+\begin{verbatim}
+OPCODE: 0130
+Mnemonic: INC
+SI (Sourceindexregister) wird um den Wert eins inkrementiert.
+\end{verbatim}
+\end{frame}
+
+\begin{frame}
+\frametitle{Aufgabe}
+\begin{itemize}
+\item Schreiben Sie ein sehr einfaches C Programm
+\item Disassemblen Sie das Programm
+\item Betrachten Sie das Programm in einem HEX Editor und versuchen Sie die OPCODES zu finden
+\end{itemize}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Disassemble}
+\begin{verbatim}
+simple.c:
+int main(int argc, char **argv)
+{
+	return argc++;
+}
+
+$ gcc -o simple.c
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Disassemble}
+\begin{verbatim}
+$ objdump -d a.out
+
+00000000004004b4 <main>:
+  4004b4:       55                      push   %rbp
+  4004b5:       48 89 e5                mov    %rsp,%rbp
+  4004b8:       89 7d fc                mov    %edi,-0x4(%rbp)
+  4004bb:       48 89 75 f0             mov    %rsi,-0x10(%rbp)
+  4004bf:       8b 45 fc                mov    -0x4(%rbp),%eax
+  4004c2:       83 45 fc 01             addl   $0x1,-0x4(%rbp)
+  4004c6:       c9                      leaveq 
+  4004c7:       c3                      retq   
+  4004c8:       90                      nop
+  4004c9:       90                      nop
+  4004ca:       90                      nop
+  4004cb:       90                      nop
+  4004cc:       90                      nop
+  4004cd:       90                      nop
+  4004ce:       90                      nop
+  4004cf:       90                      nop
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Disassemble}
+\begin{verbatim}
+$ hexdump a.out | less
+
+00004b0 c3c9 9090 4855 e589 7d89 48fc 7589 8bf0
+00004c0 fc45 4583 01fc c3c9 9090 9090 9090 9090
+00004d0 c3f3 0ceb 9090 9090 9090 9090 9090 9090
+00004e0 8948 246c 4cd8 6489 e024 8d48 332d 2009
+00004f0 4c00 258d 092c 0020 894c 246c 4ce8 7489
+0000500 f024 894c 247c 48f8 5c89 d024 8348 38ec
+\end{verbatim}
+\end{frame}
+
 \subsubsection{8, 16, 32, \dots bit?}
 \begin{frame}
-\frametitle{8 Bit}
-blubber
+\frametitle{n-Bit-Architektur}
+Pro Takt werden max. n-Bit Daten verarbeitet.
+
+Hieraus leitet sich i.d.R. auch die Breite der internen Register, sowie des
+Adress- und des Datenbusses ab.
+
+Vorteil: Adressraum / Datenbreite
+Nachteil: Speicherbedarf Pointer
 \end{frame}
 
 \subsubsection{Memory Management Unit}
 
-\begin{frame}[containsverbatim]
+\begin{frame}
 \frametitle{Memory Managemenut Unit (MMU)}
 \begin{itemize}
 \item blurb 
@@ -26,11 +154,20 @@ blubber
 \end{frame}
 
 \subsubsection{ARM, PowerPC / CELL, x86}
-\begin{frame}[containsverbatim]
+\begin{frame}
 \frametitle{ARM}
 \begin{enumerate}
 \item v1
 \end{enumerate}
 \end{frame}
 
+\subsubsection{Voraussetzungen f\"ur Linux}
+\begin{frame}
+Bit ?
+
+MMU ?
+
+ARCH Support ?
+\end{frame}
+
 \input{tailpres}
-- 
cgit v1.2.3

