ARM wurde anfangs von der Firma ACORN entwickelt und steht f\"ur Advanced Risc Machine. Es existieren
mehrere verschiedene Versionen des Instruktionssatzes, diese Ausarbeitung gibt aber lediglich einen \"Uberblick
-\"uber die prizipiellen Konzepte der Architektur.
+\"uber die prinzipiellen Konzepte der Architektur.
\subsection{Einsatzgebiet}
Die anderen Register werden verwendet um die Fehlerbehandlung zu beschleunigen. Aus diesem Grund beschreibt die ARM Architektur
eine Registermaschine mit einer RISC Architektur.
-Die Register R13, R14 und R15 finden besondere Verwendung. R13 ist der Stack-Pointer, R14 das Link Register und R15 der Program-Counter.
+Die Register \texttt{R13}, \texttt{R14} und \texttt{R15} finden besondere Verwendung. \texttt{R13} ist der Stack-Pointer, \texttt{R14} das Link Register und \texttt{R15} der Program-Counter.
Diese Register k\"onnen allerdings auch \"uber normale Instruktionen beschrieben werden. Das Link-Register beinhaltet die R\"ucksprungadresse
im Falle eines Subroutinen-Calls.
Beispielsweise ist die ARM710 Familie designed um in Hand-Helds und anderen Multimediabereichen Anwendung zu finden.
Die leistungsf\"ahigere ARM10 Familie bietet eine Vector-Floating-Point Einheit. Der Cortex A8, welcher den ARMv7 Instruktionssatz
verwendet, betreibt das IPhone 3GS, der Nintendo DS wird auch von einem ARM angetrieben. Diverse Linux-Distributionen laufen auf leistungsf\"ahigeren ARM-Prozessoren.
-Einem Bericht aus 2007 zufolge verwenden ca 98 Prozent der verkauften Mobiltelefone einen ARM Prozessor (Wikipedia).
+Einem Bericht aus 2007 zufolge verwenden zirka 98 Prozent der verkauften Mobiltelefone einen ARM Prozessor (Wikipedia).
%\subsection{Where are processors that implement the ISA deployed? In embedded systems (microcontrollers,
%communication, multimedia), in servers, in desktop computers?}
nicht am Software-Level sichtbar. Des weiteren gibt es Predicated Instructions, welche erlauben, dass die Instruktion nur
im Falle eines gesetzten Pr\"adikats ausgef\"uhrt wird. ARM verwendet f\"ur nahezu jede Instruktion 4 Bits an Pr\"adikaten. Somit
k\"onnen theoretisch 16 verschiedene Ausf\"uhrungsm\"oglichkeiten abgeleitet werden, es werden 15 gen\"utzt.
-Nach dem Testen einer Bedingung (CMP) wird dieses Ergebnis im Statusregister vermerkt (zb CMP R1, R2).
-Nun kann beispielsweise ADDEQ R0, R2, R3 und ADDNE R7, R2, R3 folgen, was folgenden Code abbildet:
-
+Nach dem Testen einer Bedingung (\texttt{CMP}) wird dieses Ergebnis im
+Statusregister vermerkt (zum Beispiel \texttt{CMP R1, R2}).
+Nun kann beispielsweise \texttt{ADDEQ R0, R2, R3} und \texttt{ADDNE R7, R2, R3} folgen, was folgenden Code abbildet:
\begin{lstlisting}[caption=Beispiel]{}
-
-if R1 = R2 then
+if R1 = R2
R0 = R2 + R3
else
R7 = R2 + R3
-end if
-
\end{lstlisting}
-
Somit k\"onnen kleine if-Bl\"ocke auf sequenzielle Statements ohne Sprung abgebildet werden.
-Sollte f\"ur eine Instruktion die Kondition nicht erf\"ullt sein wird diese einfach durch ein NOP ersetzt.
+Sollte f\"ur eine Instruktion die Kondition nicht erf\"ullt sein wird diese einfach durch ein \texttt{NOP} ersetzt.
Ein m\"ogliches Pr\"adikat ist auch Always, somit wird keine Bedingung im Statusregister gepr\"uft.
\subsection{Implementierung des Beispielcodes}
\begin{lstlisting}[caption=ARM Code]{ARM-Code}
-
; r0 = len
; r1 = ptr to arr
; wenn len=0 return 0
bne loop;
mov r0,r2
bx lr
-
\end{lstlisting}
-
Jeder Schleifendurchlauf f\"uhrt ein Load, ein Add, ein Compare und ein Branch-Equal aus.
-
-Implementiert auf einem ARM7TDMI, dieser verwendet eine 3-Stufige Pipeline, erhalten wir folgende
+Implementiert auf einem ARM7TDMI, dieser verwendet eine dreistufige Pipeline, erhalten wir folgende
Aussagen \"uber die Clockcycles:
-ldr 3, add 1, cmp 1, bne 3, was bedeutet, dass ein Schleifendurchlauf 8 Zyklen ben\"otigt (Informationen aus dem Manual des Prozessors entnommen).
+\texttt{ldr} 3, \texttt{add} 1, \texttt{cmp} 1, \texttt{bne} 3, was bedeutet, dass ein Schleifendurchlauf acht Zyklen ben\"otigt (Informationen aus dem Manual des Prozessors entnommen).
-Die Anzahl der Instruktionen in der Schleife ist 4, da auch der Sprung zum
+Die Anzahl der Instruktionen in der Schleife ist vier, da auch der Sprung zum
Schleifenbeginn mitgez\"ahlt wird. Die Codesize der Schleife betr\"agt 16 Byte,
da jede Instruktion eine L\"ange von 32 Bit hat.