progs: bench tools bei deepjit.s geadded
[calu.git] / 1_isacmp / 8051.tex
index 0fe9dc74128058a1c9eaecd480ab490a61a17b2f..30d999b917e1c7935ec157592278479a02d87afa 100644 (file)
@@ -1,17 +1,17 @@
 \section{MCS-51}
 
-Die MCS-51 Architektur wurde von Intel um 1980 entwickelt und wird, in \"ahnlicher Form, noch heute eingesetzt. Einer der bekanntesten Vertretter der Architektur ist der Intel 8051 Microkontroller. Heutzutage werden von verschiedensten Frimen Prozessoren angeboten, die ein ISA besitzen, welches mit dem MCS-51 kompatibel ist, jedoch ein schnelleres Instruktiontiminig bieten. Als Beispiel ist das CPI-51 von Silicon Laboratories zu nennen.
+Die MCS-51 Architektur wurde von Intel um 1980 entwickelt und wird, in \"ahnlicher Form, noch heute eingesetzt. Einer der bekanntesten Vertreter der Architektur ist der Intel 8051 Microkontroller. Heutzutage werden von verschiedensten Firmen Prozessoren angeboten, die ein ISA besitzen, welches mit dem MCS-51 kompatibel ist, jedoch ein schnelleres Instruktiontiminig bieten. Als Beispiel ist das CPI-51 von Silicon Laboratories zu nennen.
 
-Obwohl die MCS-51 eine 8-Bit Architektur ist, z\"ahlt sie zu den CISC Architektur \footnote{Wenn man RISC als Load-Store-Architektur definiert}, stellt eine Harvard-Architekur dar und ist eine Accumulator Maschine.
+Die MCS-51 ist eine Akkumulator Maschine, das ein 8-Bit Instruktionset besitzt, eine CISC Architektur hat und eine Harvard-Speicherarchitektur bietet.
 
 \subsection{Einsatzgebiet}
-Trotz des Alters von MCS-51 werden kompatible Prozessoren noch immer verbaut. Durch die hohe Vielfalt an Endprodukten 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.
+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 vier Teilbereiche unterteilt die denen einer \"ublichen Pipeline entsprechen und je 3 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 gilt das ein Maschinenzyklus einem Clocktakt entspricht.
+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}
 Als Ziel der Architektur ist das angegebene Einsatzgebiet (Regelungstechnik) zu sehen. Intel hebt dabei besonders die guten boolschen Operationen hervor, die auf Bitebene arbeiten k\"onnen.
@@ -20,12 +20,10 @@ Als Ziel der Architektur ist das angegebene Einsatzgebiet (Regelungstechnik) zu
 Als angenehme Features sind folgende Punkte zu nennen:
 \begin{itemize}
        \item Teilweise Anwendung von boolschen Operatoren auf einzelne Bits
-       \item Interrupts mit Priorit\"aten
        \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 8 Registern die \"ueber 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 gut einsetzbar.
-       \item Es ist die Anbindung von externem RAM m\"oglich und es gibt eigene MOV-Instruktionen daf\"ur. Jedoch ben\"otigt man f\"ur die Anbindnung Port0 und Port2 und kann diese nicht mehr Anderweitig verwenden.
+       \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:
@@ -33,6 +31,8 @@ Als etwas gew\"ohnungsbed\"urftig kann man folgende Features bezeichnen:
        \item Die Entscheidung das Upper RAM\footnote{die obere H\"alfte des RAMs} nur indirekt adressierbar zu machen. 
                Bei direkter Adressierung greift man auf das SFR\footnote{Special Function Register} zu, indem Peripherie, Statusbytes, Accumulator, \ldots des Prozessors sind.
        \item Es sind nur 16 Byte des Lower RAM und Bytes im SFR, deren Adresse auf 0x0h oder 0x8h enden, direkt Bit-adressierbar.
+       \item Die geringe Anzahl an Conditional Branches.
+       \item Es gibt keine Befehle um mit 16-Bit Daten umzugehen, abgesehen vom Datapointer.
 \end{itemize}
 
 \subsection{Listing}
@@ -40,36 +40,11 @@ Das Ergebnis der \"Ubersetzung h\"angt von Vorbedingungen ab die nicht angegeben
 \begin{itemize}
        \item Der Array liegt im externen RAM
        \item Die Adresse ist 16-Bit lang
-       \item In Register 7 wird len \"uebergeben und in Register 5 und 6 das High- bzw. Low-Byte der Adresse.
-       \item In Register 7 wird das Ergebnis zur\"uckgeliefert
+       \item Es werden die Calling Conventions von SDCC verwendet
 \end{itemize}
-Das Timing wurde f\"ur die Original MCS-51 Architektur ermittelt und f\"ur die CPI-51. Da diese Architekturen kompatibel sind, ist keine Unterschied in der Programmgr\"o\ss e vorhanden.
-\begin{lstlisting}[caption=MCS-51 Code]
-crl r4 //clears r4 (sum)
-cjne r7, #0, exec //only execute prog if len/i > 0
+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.
+\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.
 
-sjmp exit //jump to exit
-
-exec:
-mov DPL, r6  //load datapointer low with r6
-mov DPH, r5  //load datapointer high with r5
-
-loop:
-       movx A, @DPTR // read arr[i] from address stored in DPTR
-       add A, r4     // add sum to arr[i]
-       mov r4, A     // mov sum into r4
-       inc DPTR      // increment address
-
-djnz r7, loop     // decrement i and jump if not zero
-
-exit:
-mov r7,r4 //returns sum in r7
-
-ret
-\end{lstlisting}
-
-Es werden pro Schleifeniteration 5 Instruktionen ausgef\"uhrt. Dadurch ergibt sich bei einem MCS-51 eine Ausf\"uhrungszeit von 8$\mu$s was 8 Maschinenzyklen und damit 96 Clocktakte. 
-Ein CPI-51 ben\"otigt 9 Clocktakte f\"ur eine Iteration, bei der letzen Ausf\"uhrung einen weniger.
-
-Die Codesize der Schleife ist 6 Bytes.