isa_cmp: Loopsize added
[calu.git] / 1_isacmp / avr.tex
1 \section{AVR}
2
3 Das 8-bit AVR Instruction Set ist das von den meisten Atmel Microkontroller implementierte Instructions Set.
4 Es ist eine RISC Architektur die vorallem auf 1 Zyklus Instructionen hin optimiert ist.
5 Es handelt sich hierbei um eine Register basierende Maschiene.
6
7 \subsection{Einsatzgebiet}
8 Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche die breiteste Auswahl aus Peripherie M\"oglichkeiten/Ger\"aten anbietet. 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,UARToder I2C.
9 Ausswerdem bietet es Features wie selbst programmierung f\"ur den Flash und sicherer, g\"unstige Upgrades w\"ahrend des Betriebs.
10
11 \subsection{Conditional Jumps}
12 Conditional Jumps sind bei dieser ISA immer getrennt vorhanden. 
13 Es gibt ein Set an Jump Instructionen, sowie eines f\"ur Branches.
14 Die Latenzzeiten die auftreten f\"ur Jumps und Branches, sowie f\"ur andere mehr Zyklen Instructionen werden auf Hardwareebene behandelt und sind deshalb nicht auf den ISA Level sichbar.
15
16 \subsection{Ziele}
17 Laut der ersten Feature Zeile in den AVR PDFs liegt das hauptaugenmerk auf:
18
19 High-performance, Low-power
20
21 Umgesetzt wird das ganze durch Instructionen die haupts\"achlich in einem Zyklus abgearbeitet werden.
22
23 \subsection{W\"unsche und gute Features}
24 Folgende zwei Punkte finde ich besonders positiv:
25 \begin{itemize}
26         \item Das getrennte Compare-Branch Konzept find ich sehr angenehm, da man die weiligen Optionen nach Wunsch kombinieren kann.
27         \item Das man viele Bitoperationen (auch Vergleiche f\"ur Conditional Jumps) zur Verf\"ugung hat.
28 \end{itemize}
29 Negativ auffallen ist mir:
30 \begin{itemize}
31         \item Es gibt keinen add imidiate Befehl um eine Konstante zu einem Register hinzuzuf\"ugen.
32 \end{itemize}
33
34 \subsection{Listing}
35 Ich gehe von folgenden Vorbedingungen aus:
36 \begin{itemize}
37         \item len in r24,r25
38         \item Array im Datenspeicher unter Y+0:Y+1 bis Y+6:Y+7 abgelegt
39         \item Summe wird in r24,r25 gespeichert
40 \end{itemize}
41
42 \begin{lstlisting}[caption=MCS-51 Code]
43 subroutine:
44 ld r28,"Adresse mit zu verwendenden Arraydaten"
45 ld r29,"Adresse mit zu verwendenden Arraydaten"
46
47 adiw r25:r124,1
48 subi r29:r28,2
49 ldi r1,0x00
50 ldi r2;0x00
51 ldi r20,0x00
52 ldi r21,0x00
53
54 for:
55 adiw r2:r1,1
56 adiw r29:r28,2
57
58 ldd r24,Y
59 ldd r25,Y+1
60
61 add r20,r24
62 adc r21,r25
63
64 cp  r1,r10
65 cpc r2,r11
66 brlt for
67
68 ld r24,r20
69 ld r25,r21
70 ret
71 \end{lstlisting}
72
73
74