beginner_de
beginner_de
beginner_de
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Avr-Asm-Tutorial S. 31<br />
6 Register<br />
6.1 Was ist ein Register?<br />
Register sind beson<strong>de</strong>re Speicher mit je 8 Bit Kapazität. Sie sehen bitmäßig daher etwa so aus:<br />
7 6 5 4 3 2 1 0<br />
Man merke sich die Nummerierung <strong>de</strong>r Bits: sie beginnt immer bei Null. In einen solchen Speicher<br />
passen entwe<strong>de</strong>r<br />
• Zahlen von 0 bis 255 (Ganzzahl ohne Vorzeichen),<br />
• Zahlen von -128 bis +127 (Ganzzahl mit Vorzeichen in Bit 7),<br />
• ein Acht-Bit-ASCII-Zeichen wie z.B. 'A' o<strong>de</strong>r auch<br />
• acht einzelne Bits, die sonst nix miteinan<strong>de</strong>r zu tun haben (z.B. einzelne Flaggen o<strong>de</strong>r<br />
Flags).<br />
Das Beson<strong>de</strong>re an diesen Registern (im Gegensatz zu an<strong>de</strong>ren Speichern) ist, dass sie<br />
• direkt in Instruktionen verwen<strong>de</strong>t wer<strong>de</strong>n können, da sie direkt an das Rechenwerk, <strong>de</strong>n Akkumulator,<br />
angeschlossen sind,<br />
• Operationen mit ihrem Inhalt mit nur einem Instruktionswort ausgeführt wer<strong>de</strong>n können,<br />
• sowohl Quelle von Daten als auch Ziel <strong>de</strong>s Ergebnisses <strong>de</strong>r Operation sein können.<br />
Es gibt 32 davon in je<strong>de</strong>m AVR. Auch <strong>de</strong>r kleinste AVR hat schon so viele. Diese Eigenschaft macht<br />
die AVR ziemlich einzigartig, weil dadurch viele Kopieraktionen und <strong>de</strong>r langsamere Zugriff auf<br />
an<strong>de</strong>re Speicherarten oft nicht nötig ist. Die Register wer<strong>de</strong>n mit R0 bis R31 bezeichnet, man kann<br />
ihnen mit einer Assemblerdirektive aber auch einen etwas wohlklingen<strong>de</strong>ren Namen verpassen, wie<br />
z.B.<br />
.DEF MeinLieblingsregister = R16<br />
Assemblerdirektiven gibt es einige (siehe die Tabelle im Anhang), sie stellen Regie-Anweisungen<br />
an <strong>de</strong>n Assembler dar und erzeugen selbst keinen ausführbaren Co<strong>de</strong>. Sie beginnen immer mit einem<br />
Punkt.<br />
Statt <strong>de</strong>s Registernamens R16 wird dann für<strong>de</strong>rhin immer <strong>de</strong>r neue Name verwen<strong>de</strong>t. Das könnte also<br />
ein schreibintensives Programm wer<strong>de</strong>n.<br />
Mit <strong>de</strong>r Instruktion<br />
LDI MeinLieblingsRegister, 150<br />
was in etwa be<strong>de</strong>utet: La<strong>de</strong> die Zahl 150 in das Register R16, aber hurtig, (in englisch: LoaD Immediate)<br />
wird ein fester Wert o<strong>de</strong>r eine Konstante in mein Lieblingsregister gela<strong>de</strong>n. Nach <strong>de</strong>m Übersetzen<br />
(Assemblieren) ergibt das im Programmspeicher etwa folgen<strong>de</strong>s Bild:<br />
000000 E906<br />
In E906 steckt sowohl die Load-Instruktion als auch das Zielregister (R16) als auch die Konstante<br />
150, auch wenn man das auf <strong>de</strong>n ersten Blick nicht sieht. Auch dies macht Assembler bei <strong>de</strong>n AVR<br />
zu einer höchst effektiven Angelegenheit: Instruktion und Konstante in einem einzigen Instruktionswort<br />
– schnell und effektiv ausgeführt. Zum Glück müssen wir uns um diese Übersetzung nicht<br />
kümmern, das macht <strong>de</strong>r Assembler für uns.