02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!