1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
\input{configpres}
\subsection{Prozessor Architekturen}
\title{\lq Prozessor Architekturen\rq}
\maketitle
\begin{frame}
\frametitle{Übersicht}
\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{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}
\frametitle{Memory Managemenut Unit (MMU)}
\begin{itemize}
\item blurb
\end{itemize}
\end{frame}
\subsubsection{ARM, PowerPC / CELL, x86}
\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}
|