isa_cmp: layout stuff and minor fixes again
authorBernhard Urban <lewurm@gmail.com>
Thu, 21 Oct 2010 08:50:19 +0000 (10:50 +0200)
committerBernhard Urban <lewurm@gmail.com>
Thu, 21 Oct 2010 08:50:19 +0000 (10:50 +0200)
1_isacmp/8051.tex
1_isacmp/arm.tex
1_isacmp/avr.tex
1_isacmp/cmp.tex
1_isacmp/isa_cmp.tex
1_isacmp/ppc.tex
1_isacmp/spear2.tex

index 1b3c26974d904a014c085aeecb18c32cc01f72e8..66173f44831a615697cedff2c3895c2771913460 100644 (file)
@@ -8,9 +8,9 @@ Die MCS-51 ist eine Akkumulator Maschine, das ein 8-Bit Instruktionset besitzt,
 Trotz des Alters des MCS-51 werden kompatible Prozessoren noch immer verbaut. Durch die hohe Vielfalt an konkreten Prozessoren k\"onnen sie in vielen Gebieten eingesetzt werden, z.B. wenn ein geringer Stromverbrauch ben\"otigt wird und 8-Bit ausreichend sind. Der von Intel im ``MCS\copyright 51 Microcontroller Family User's Manual (1994)'' angegebene Einsatzzweck sind regelungstechnische Anwendungen.
 
 \subsection{Conditional Jumps}
-Conditional Jumps sind als Instruktionen vorhanden, jedoch in limitierten Umfang. Es sind nur (not) zero auf Bytes, Carry set auf das Statusbyte und Bit (not) set auf einige ausgew\"ahlte Bytes im RAM m\"oglich. Alle anderen Sprungtypen m\"ussen auf die vorhandenen Zur\"uckgef\"uhrt werden.
+Conditional Jumps sind als Instruktionen vorhanden, jedoch in limitierten Umfang. Es sind nur \texttt{(not) zero} auf Bytes, Carry set auf das Statusbyte und Bit \texttt{(not) set} auf einige ausgew\"ahlte Bytes im RAM m\"oglich. Alle anderen Sprungtypen m\"ussen auf die vorhandenen Zur\"uckgef\"uhrt werden.
 
-Latenzen werden in Hardware behandelt und sind nicht auf dem ISA Level sichtbar. Es ist jedoch anzumerken das in der MCS-51 Architektur eine Unterscheidung zwischen Clocktakt und Maschinenzyklen zu machen ist. Eine Instruktion ben\"otigt f\"ur ihre Ausf\"uhrung mindestens einen Maschinenzyklus. Ein Maschinenzyklus wird in sechs Teilbereiche unterteilt, die \"ublichen Pipelinestages \"ahnlich sind, und je 6 Clocktakte ben\"otigen. Dadurch entspricht eine Maschinenzyklus 12 Clocktakten.
+Latenzen werden in Hardware behandelt und sind nicht auf dem ISA Level sichtbar.  Es ist jedoch anzumerken das in der MCS-51 Architektur eine Unterscheidung zwischen Clocktakt und Maschinenzyklen zu machen ist. Eine Instruktion ben\"otigt f\"ur ihre Ausf\"uhrung mindestens einen Maschinenzyklus. Ein Maschinenzyklus wird in sechs Teilbereiche unterteilt, die \"ublichen Pipelinestages \"ahnlich sind, und je sechs Clocktakte ben\"otigen. Dadurch entspricht eine Maschinenzyklus 12 Clocktakten.
 Diese Unterscheidung muss bei modernen Designs, wie dem CPI-51, nicht mehr gemacht werden. Diese besitzen schon eine vollst\"andige Pipeline wodurch ein Maschinenzyklus einem Clocktakt entspricht.
 
 \subsection{Ziele}
@@ -21,9 +21,9 @@ Als angenehme Features sind folgende Punkte zu nennen:
 \begin{itemize}
        \item Teilweise Anwendung von boolschen Operatoren auf einzelne Bits
        \item In der ISR-Vector Tabelle sind 8 Bytes f\"ur jeden Interrupt vorhanden, wodurch kleine ISR's direkt in dieser platziert werden k\"onnen.
-       \item Es gibt 4 Registerbanken zu je 8 Registern die \"uber das PSW \footnote{Program Status Word} ausgew\"ahlt werden k\"onnen.
+       \item Es gibt 4 Registerbanken zu je 8 Registern die \"uber das PSW\footnote{Program Status Word} ausgew\"ahlt werden k\"onnen.
        \item Eine Division liefert Quotient und Rest.
-       \item Die DJNZ-Operation \footnote{decrement jump not zero} ist bei Schleifen mit einem 8-Bit Counter gut einsetzbar.
+       \item Die DJNZ-Operation\footnote{\texttt{decrement jump not zero}} ist bei Schleifen mit einem 8-Bit Counter gut einsetzbar.
 \end{itemize}
 
 Als etwas gew\"ohnungsbed\"urftig kann man folgende Features bezeichnen:
@@ -44,9 +44,8 @@ Das Ergebnis der \"Ubersetzung h\"angt von Vorbedingungen ab die nicht angegeben
 \end{itemize}
 
 \lstinputlisting[caption=MCS-51 Code]{8051.s}
-
 Das Timing wurde f\"ur die Original MCS-51 Architektur ermittelt.
 Es werden pro Schleifeniteration 21 Instruktionen ausgef\"uhrt. Dadurch ergibt sich eine Ausf\"uhrungszeit von 30$\mu$s (bei einer Clock von 12MHz) was 30 Maschinenzyklen beziehungsweise 360 Clocktakte entspricht. Die Codesize der Schleife ist 32 Bytes.
 
-Wenn man von 8-Bit Daten ausgehen w\"urde, h\"atte eine Schleifeniteration 5 Instruktionen, eine Ausf\"uhrungszeit von 8$\mu$s und eine Codesize von 6 Bytes. Es ist also sehr sch\"on zu sehen das Operationen mit 16-Bit Daten sehr teuer sind im Vergleich zu 8-Bit Daten.
+Wenn man von 8-Bit Daten ausgehen w\"urde, h\"atte eine Schleifeniteration f\"unf Instruktionen, eine Ausf\"uhrungszeit von 8$\mu$s und eine Codesize von 6 Bytes. Es ist also sehr sch\"on zu sehen das Operationen mit 16-Bit Daten sehr teuer sind im Vergleich zu 8-Bit Daten.
 
index 9370b280a324058b7ab9e7aae99656f873914a37..13214bdaee0a218929c4e9903fd083d77c25d221 100644 (file)
@@ -11,7 +11,7 @@ Es existieren 31 general-purpose Register, 16 davon k\"onnen direkt \"uber die R
 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.
 
@@ -19,7 +19,7 @@ ARM bietet eine breite Varianz an Kernen f\"ur den Einsatz in verschiedenen Gebi
 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?}
@@ -48,21 +48,17 @@ Im Vergleich zu \"alteren RISC Architekturen kommt ARM ohne die Verwendung von B
 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.
 
@@ -119,7 +115,6 @@ implementiert, man kann solches Verhalten auf einen Operanden einer Anweisung an
 \subsection{Implementierung des Beispielcodes}
 
 \begin{lstlisting}[caption=ARM Code]{ARM-Code}
-
        ; r0 = len
        ; r1 = ptr to arr
        ; wenn len=0 return 0
@@ -135,16 +130,13 @@ loop:
        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.
index e5be4f78cafdb6a5271394a979ca1ce4df6f3240..7af4a93dd57acc548ea0164de8b913fd2dccbe31 100644 (file)
@@ -5,20 +5,20 @@ Es ist eine RISC Architektur die vorallem auf 1 Zyklus Instructionen hin optimie
 Es handelt sich hierbei um eine Register basierende Maschine.
 
 \subsection{Einsatzgebiet}
-Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche im Embedded Bereich eingesetzt wird. Sie bietet eine breite Auswahl aus Peripherie M\"oglichkeiten/Ger\"aten an. Dies macht sie verwendbar f\"ur eine breite Palette an Applicationen. Die Serie verf\"ugt unter anderem \"uber USB, LCD, CAN und LIN Interfaces, zus\"atzlich zu den Standards f\"ur SPI, UART oder I2C.
+Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche im
+Embedded Bereich eingesetzt wird. Sie bietet eine breite Auswahl aus Peripherie
+M\"oglichkeiten/Ger\"aten an. Dies macht sie verwendbar f\"ur eine breite Palette an Applikationen. Die Serie verf\"ugt unter anderem \"uber USB, LCD, CAN und LIN Interfaces, zus\"atzlich zu den Standards f\"ur SPI, UART oder I2C.
 Au\ss erdem bietet es Features wie die Selbstprogrammierung des Flashes und damit sichere, g\"unstige Upgrades w\"ahrend des Betriebes an.
 
 \subsection{Conditional Jumps}
 Conditional Jumps sind bei dieser ISA immer getrennt vorhanden.
-Es gibt ein Set aus 3 Compare Instructionen, sowie eine Set f\"ur Branches.
+Es gibt ein Set aus drei Compare Instructionen, sowie eine Set f\"ur Branches.
 Durch die Compares werden im Statusregister Bits gesetzt bzw. gel\"oscht, welche dann von den einzelnen Branches abgefragt werden k\"onnen.
 Die Latenzzeiten die bei Jumps und Branches, sowie bei anderen Instructionen mit mehreren Zyklen, auftreten werden auf Hardwareebene behandelt und sind deshalb nicht auf dem ISA Level sichtbar.
 
 \subsection{Ziele}
-Laut der ersten Feature Zeile in den AVR PDFs liegt das Hauptaugenmerk auf:
-
-High-performance, Low-power
-
+Laut der ersten Feature Zeile in den AVR PDFs liegt das Hauptaugenmerk auf
+High-Performance und niedrigen Energieverbrauch.
 Da die Komponenten haupts\"achlich im Embedded Bereich eingesetzt werden ist klar, dass ein niedriger Energieverbrauch besonders wichtig ist.
 Umgesetzt wird das ganze durch Instructionen die haupts\"achlich in einem Zyklus abgearbeitet werden.
 Au\ss erdem werden bei den diversen Serien noch Sleep-Modi und andere Konzepte angeboten, die das Low-power Schema noch weiter unterst\"utzen.
@@ -32,65 +32,58 @@ Folgende zwei Punkte finde ich besonders positiv:
 \end{itemize}
 Negativ auffallen ist mir:
 \begin{itemize}
-       \item Es gibt keinen add immediate Befehl um eine Konstante zu einem Register hinzuzuf\"ugen, jedoch um eine Konstante zu einem Word hinzuzuf\"ugen.
+       \item Es gibt keinen \texttt{add} immediate Befehl um eine Konstante zu einem Register hinzuzuf\"ugen, jedoch um eine Konstante zu einem Word hinzuzuf\"ugen.
 \end{itemize}
 
 \subsection{Listing}
 Ich gehe von folgenden Vorbedingungen aus:
 \begin{itemize}
-       \item len in r24,r25
-       \item Array liegt im Datenspeicher ab Y+0:Y+1
-       \item Summe wird in r24,r25 gespeichert
+       \item \texttt{len} in \texttt{r24,r25}
+       \item das Array liegt im Datenspeicher ab \texttt{Y+0:Y+1}
+       \item Summe wird in \texttt{r24,r25} gespeichert
 \end{itemize}
-
 \begin{lstlisting}[caption=AVR Code]
 subroutine:
-mov r28,"Adresse mit zu verwendenden Arraydaten"
-mov r29,"Adresse mit zu verwendenden Arraydaten"
-
-adiw r25:r24,1
-mov  r10,r24
-mov r11,r25
-subi r29:r28,2
-ldi r1,0x01
-ldi r2,0x01
-ldi r20,0x00
-ldi r21,0x00
-cp  r10,r1
-cpc r11,r2
-brlt exit
-
-ldi r1,0x00
-ldi r2,0x00
-
+       mov r28,"Adresse mit zu verwendenden Arraydaten"
+       mov r29,"Adresse mit zu verwendenden Arraydaten"
+
+       adiw r25:r24,1
+       mov  r10,r24
+       mov r11,r25
+       subi r29:r28,2
+       ldi r1,0x01
+       ldi r2,0x01
+       ldi r20,0x00
+       ldi r21,0x00
+       cp  r10,r1
+       cpc r11,r2
+       brlt exit
+
+       ldi r1,0x00
+       ldi r2,0x00
 
 for:
-adiw r2:r1,1 # 2 c 2 b
-adiw r29:r28,2
+       adiw r2:r1,1 # 2 c 2 b
+       adiw r29:r28,2
 
-ldd r24,Y # 2 c 2 b
-ldd r25,Y+1
+       ldd r24,Y # 2 c 2 b
+       ldd r25,Y+1
 
-add r20,r24 # 1 c 2 b
-adc r21,r25 # 1 c 2 b
+       add r20,r24 # 1 c 2 b
+       adc r21,r25 # 1 c 2 b
 
-cp  r1,r10 # 1 c 2 b
-cpc r2,r11 # 1 c 2 b
-brlt for # 1 c if false 2 c if true 2 b
+       cp  r1,r10 # 1 c 2 b
+       cpc r2,r11 # 1 c 2 b
+       brlt for # 1 c if false 2 c if true 2 b
 
-mov r24,r20
-mov r25,r21
+       mov r24,r20
+       mov r25,r21
 exit:
-ret
+       ret
 \end{lstlisting}
-
 Daraus ergibt sich:
 \begin{itemize}
        \item Anzahl Instructionen: 9
-       \item Anzahl Zyklen: wenn Branch false 13 sonst 14
+       \item Anzahl Zyklen: wenn Branch \texttt{false} 13 sonst 14
        \item Anzahl Bytes: 18
 \end{itemize}
-
-
-
index 9d43a38341cc57da8d7b39be5e2aa143f107d032..c6a35d34fbdc3ea0e6db119fadeaa9f4cc602410 100644 (file)
@@ -6,12 +6,9 @@ Bei AVR und SPEAR2 sind die meisten Instruktionen darauf ausgelegt in einem Zykl
 Bei Conditional Operations reicht die Anzahl und deren Umfang von sehr beschr\"ankt (MCS-51) bis zu fast alle Instruktionen (ARM).
 Als Anwendungsgebiete kann man f\"ur alle Architekturen auf jedenfall Embedded Systems angeben. ARM und PowerPC sind auch im Desktop- und Serverbereich anzutreffen.
 Die Instruktionsetgr\"o\ss e ist bei AVR und MCS-51, durch die 8-Bit bedingt, eher klein. SPEAR2 ist auch eher klein weil die urspr\"ungliche Architektur ebenfalls nur 8-Bit war. ARM und PowerPC haben, auch durch die 32-Bit L\"ange bedingt, ein gro\ss es Instruktionset.
+\lstinputlisting[caption=Compute Sum, language=C, label=list:sum]{sum.c}
 Das Sichern der R\"ucksprungadresse wird unterschiedlich gehandhabt. AVR und MCS-51 sichern die Adresse automatisch auf den Stack. PowerPC, SPEAR2 und ARM sichern die R\"ucksprungadresse in ein Register.
 Codesizes und Ausf\"uhrungszeiten des Codest\"ucks \texttt{sum} aus Listing~\ref{list:sum} sind in Tabelle~\ref{cmp_tab} ersichtlich. Es ist sofort ersichtlich das die Prozessoren mit h\"oherer Instruktionsl\"ange besser abschneiden wenn es um die Anzahl der Zyklen, und dadurch bedingt, um die Codesize geht, was aber auch nicht sehr verwunderlich ist.\\
-
-
-\lstinputlisting[caption=Compute Sum, language=C, label=list:sum]{sum.c}
-
 \begin{table}[ht]
 \begin{center}
        \begin{tabular}{|l|c|c|c|c|c|}\hline
index 750a7b0c452e50cc284477ac2579199e6d6aab5c..a3cf02eb8745ce08f2760c6f4d2f0ca2a9300f73 100644 (file)
 \tableofcontents
 \newpage
 
-\input{arm}
-\input{avr}
-\input{8051}
-\input{ppc}
-\input{spear2}
-\input{cmp}
+\include{arm}
+\include{avr}
+\include{8051}
+\include{ppc}
+\include{spear2}
+\include{cmp}
 
 \end{document}
index d86677e43f3a08cf2ca588e755a750371efe4f73..b12fe38d9616b5c42cc6ceae40346e27334bdbd6 100644 (file)
@@ -15,7 +15,6 @@ Implementierung 32- oder 64-Bit sein; hier wollen wir nur auf 32-Bit eingehen.
 \subsection{Einsatzgebiete und Ziele}
 PowerPC wurde mit dem Ziel entwickelt m\"oglichst skalierbar und flexibel zu
 sein, da die tats\"achlichen Anwendungsgebiete recht unterschiedlich sind.
-
 Man findet diese Architektur daher in verschiedenen Bereichen:
 \begin{description}
 \item[Desktop] Apple verwendete PowerPC, aber mittlerweile von \texttt{x86}
@@ -27,13 +26,9 @@ finden
 Architektur weit mehr ist}
 \item[Server] Vertreten durch beispielsweise POWER7 oder BlueGene
 \end{description}
-
 % What are the goals of the architecture? Performance, die area, energy
 % efficiency, code size, . . . ?
-
 % How are these goals reflected in the ISA?
-
-
 Die PowerPC Architektur ist also recht vielf\"altig und es gibt daher nicht
 \textit{das} Einsatzgebiet. Im Speziellen gibt es verschiedene \textit{Books}
 die unterschiedliche Bereiche abdecken und je nach den Bed\"urfnissen des CPU
index 2f222adb46c6cafcb1bf8253f94e755fdfd424b0..291be4e9cf47e8cb4c42d071bddff06592a3e80c 100644 (file)
@@ -14,7 +14,7 @@ Entwickler die Wahl, welchen Algorithmus er in Hardware und welchen Software imp
 \subsection{Conditional Instructions und Jumps}\r
 Alle Abh\"angigkeiten werden von der Hardware \"uberpr\"uft und entsprechend behandelt. D.h.\r
 im ISA-Level m\"ussen keine Abh\"angigkeiten ber\"ucksichtigt werden. Im Falle von CI wird entweder\r
-ein NOP-eingef\"ugt (bzw. Ctrl-Signale deaktiviert) oder die Instruktion wird normal behandelt.\r
+ein \texttt{NOP} eingef\"ugt (bzw. Ctrl-Signale deaktiviert) oder die Instruktion wird normal behandelt.\r
 Alle Conditional- und Jump Tests passiern in der Decode-Stufe und die eigentliche Ausf\"uhrung wird in der Exec-Stage\r
 abgeschlossen, wobei Ctrl-Signale an die Decode-Stufe zur\"uckgef\"uhrt werden. Es wurden keine\r
 Stalls oder \"ahnliches eingef\"uhrt, damit die Programm Execution einer Instruktion konstant bleibt.\r
@@ -26,7 +26,8 @@ diese als Erweiterungsmodule implementiert werden. Somit kann der Spear2 relativ
 und eine h\"ohere Taktrate erzielen als eine Hardcore-Architektur. Au\ss erdem ist SW leichter zu warten und verstehen, dies\r
 wiederrum verk\"urzt die Entwicklungszeit. Dennoch wird ein Fixedfunction-Core bessere Ergebnisse erzielen, wenn sich\r
 die Funktionalit\"at des Softcore-Prozessors nicht mehr von diesem unterscheidet.\r
-Da aber die ISA relativ begrenzt ist (add, sub, comp, load, store,...), wird die Programmgr\"o\ss e (fixed OP-Code) nat\"urlich\r
+Da aber die ISA relativ begrenzt ist (\texttt{add}, \texttt{sub}, \texttt{comp},\r
+\texttt{load}, \texttt{store},...), wird die Programmgr\"o\ss e (fixed OP-Code) nat\"urlich\r
 bei komplexen Operationen wachsen. Dennoch ist der OP-Code mit 16-Bit relativ klein.\r
 \r
 Damit auf Extension-Module oder Speicher schnell zugegriffen werden kann (Stackoperation), gibt es sogenannte Framepointer.\r
@@ -37,24 +38,25 @@ Prinzipiell ist diese ISA eine sehr kompakte und elegante Form einer RISC-Archit
 w\"unschenswert gewesen, da bei verschachtelten Subroutine-Calls die Software die R\"ucksprungadresse speichern muss. F\"ur\r
 einen stack\"ahnlichen Betrieb kann nat\"urlich ein Framepointer herangezogen werden. Dennoch w\"achst dadurch der Code.\r
 \subsection{Listing}\r
-Register r14 wird f\"ur die R\"ucksprungadresse verwendet, r0 f\"ur den R\"uckgabewert und r1-r4 f\"ur die Argumente.\r
-r5-r8 wird f\"ur tempor\"are Register verwendet (Caller-Save).\r
+Register \texttt{r14} wird f\"ur die R\"ucksprungadresse verwendet, \texttt{r0} f\"ur den R\"uckgabewert und \texttt{r1-r4} f\"ur die Argumente.\r
+\texttt{r5-r8} wird f\"ur tempor\"are Register verwendet (Caller-Save).\r
 \begin{lstlisting}[caption=Spear2 Code]{Spear2-Code}\r
-ldli r0, 0   #sum=0\r
-ldli r5,-20  #Framepointer X\r
-ldli r6, 0   #i=0\r
-stw r2, r5   #fpx -> &arr[0]\r
+ldli r0, 0    #sum=0\r
+ldli r5,-20   #Framepointer X\r
+ldli r6, 0    #i=0\r
+stw r2, r5    #fpx -> &arr[0]\r
 \r
 cmp_eq r1, r6 #for\r
 jmpi_ct, 4    #i<len\r
 \r
-ldfpx r7,0   #arr[i]\r
-add r0, r7   #sum+=arr[i]\r
-addi r6, 1   #i++\r
+ldfpx r7,0    #arr[i]\r
+add r0, r7    #sum+=arr[i]\r
+addi r6, 1    #i++\r
 \r
-jmpi -5      #for end\r
+jmpi -5       #for end\r
 rts\r
 \end{lstlisting}\r
-Man erkennt, dass innerhalb der Schleife 6 Instruktionen ausgef\"uhrt werden (inkl. Bedingungen). Ein Jump bewirkt\r
-einen Flush in der Decode-Stufe. Also wird jump zu einem jump+nop. Solange die Schleife exekutiert wird, ergibt sich eine\r
-Laufzeit von 7 Zyklen, bei 6 Befehlen was einer Codesize des Loops von 12 Bytes entspricht.\r
+Man erkennt, dass innerhalb der Schleife sechs Instruktionen ausgef\"uhrt werden (inkl. Bedingungen). Ein Jump bewirkt\r
+einen Flush in der Decode-Stufe. Also wird \texttt{jump} zu einem\r
+\texttt{jump+nop}. Solange die Schleife exekutiert wird, ergibt sich eine\r
+Laufzeit von sieben Zyklen, bei sechs Befehlen was einer Codesize des Loops von 12 Bytes entspricht.\r