02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Avr-Asm-Tutorial S. 49<br />

und ORG trivial sind, können sie auch weggelassen wer<strong>de</strong>n und <strong>de</strong>r Assembler macht das dann automatisch<br />

so. Wer aber <strong>de</strong>n Beginn <strong>de</strong>s Co<strong>de</strong>s nach zwei Seiten Konstanten<strong>de</strong>finitionen ein<strong>de</strong>utig<br />

markieren will, kann das mit <strong>de</strong>n bei<strong>de</strong>n Direktiven tun.<br />

Auf das ominöse erste Wort Programmco<strong>de</strong> folgen fast ebenso wichtige Spezialinstruktionen, die<br />

Interrupt-Vektoren. Dies sind festgelegte Stellen mit bestimmten Adressen. Diese Adressen wer<strong>de</strong>n<br />

bei Auslösung eines Interrupts durch die Hardware angesprungen, wobei <strong>de</strong>r normale Programmablauf<br />

unterbrochen wird. Diese Vektoren sind spezifisch für je<strong>de</strong>n Prozessortyp (siehe unten bei <strong>de</strong>r<br />

Erläuterung <strong>de</strong>r Interrupts). Die Instruktionen, mit <strong>de</strong>nen auf eine Unterbrechung reagiert wer<strong>de</strong>n<br />

soll, müssen an dieser Stelle stehen. Wer<strong>de</strong>n also Interrupts verwen<strong>de</strong>t, dann kann die erste Instruktion<br />

nur eine Sprunginstruktion sein, damit diese ominösen Vektoren übersprungen wer<strong>de</strong>n. Der typische<br />

Programmablauf nach <strong>de</strong>m Reset sieht also so aus:<br />

.CSEG<br />

.ORG 0000<br />

RJMP Start<br />

[...] hier kommen dann die Interrupt-Vektoren<br />

[...] und danach nach Belieben noch alles mögliche an<strong>de</strong>re Zeug<br />

Start: ; Das hier ist <strong>de</strong>r Programmbeginn<br />

[...] Hier geht das Hauptprogramm dann erst richtig los.<br />

Die Instruktion RJMP bewirkt einen Sprung an die Stelle im Programm mit <strong>de</strong>r Kennzeichnung<br />

Start:, auch ein Label genannt. Die Stelle Start: folgt weiter unten im Programm und ist <strong>de</strong>m Assembler<br />

hiermit entsprechend mitgeteilt: Labels beginnen immer in Spalte 1 einer Zeile und en<strong>de</strong>n<br />

mit einem Doppelpunkt. Labels, die diese bei<strong>de</strong>n Bedingungen nicht einhalten, wer<strong>de</strong>n vom Assembler<br />

nicht ernstgenommen. Fehlen<strong>de</strong> Labels aber lassen <strong>de</strong>n Assembler sinnierend innehalten und<br />

mit einer "Un<strong>de</strong>fined label"-Fehlermeldung die weitere Zusammenarbeit einstellen.<br />

9.2 Linearer Programmablauf und Verzweigungen<br />

Nach<strong>de</strong>m die ersten Schritte im Programm gemacht sind, noch etwas triviales: Programme laufen<br />

linear ab. Das heißt: Instruktion für Instruktion wird nacheinan<strong>de</strong>r aus <strong>de</strong>m Programmspeicher geholt<br />

und abgearbeitet. Dabei zählt <strong>de</strong>r Programmzähler immer eins hoch. Ausnahmen von dieser<br />

Regel wer<strong>de</strong>n nur vom Programmierer durch gewollte Verzweigungen o<strong>de</strong>r mittels Interrupt herbeigeführt.<br />

Da sind Prozessoren ganz stur immer gera<strong>de</strong>aus, es sei <strong>de</strong>nn, sie wer<strong>de</strong>n gezwungen.<br />

Und zwingen geht am einfachsten folgen<strong>de</strong>rmaßen. Oft kommt es vor, dass in Abhängigkeit von bestimmten<br />

Bedingungen gesprungen wer<strong>de</strong>n soll. Dann benötigen wir bedingte Verzweigungen. Nehmen<br />

wir an, wir wollen einen 32-Bit-Zähler mit <strong>de</strong>n Registern R1,<br />

R2, R3 und R4 realisieren. Dann muss das nie<strong>de</strong>rwertigste Byte in<br />

R1 um Eins erhöht wer<strong>de</strong>n. Wenn es dabei überläuft, muss auch<br />

R2 um Eins erhöht wer<strong>de</strong>n usw. bis R4.<br />

Die Erhöhung um Eins wird mit <strong>de</strong>r Instruktion INC erledigt.<br />

Wenn dabei ein Überlauf auftritt, also 255 zu 0 wird, dann ist das<br />

im Anschluss an die Durchführung am gesetzten Z-Bit im Statusregister<br />

zu bemerken. Das eigentliche Übertragsbit C <strong>de</strong>s Statusregisters<br />

wird bei <strong>de</strong>r INC-Instruktion übrigens nicht verän<strong>de</strong>rt,<br />

weil es woan<strong>de</strong>rs dringen<strong>de</strong>r gebraucht wird und das Z-Bit völlig<br />

ausreicht. Wenn <strong>de</strong>r Übertrag nicht auftritt, also das Z-Bit nicht<br />

gesetzt ist, können wir die Erhöherei been<strong>de</strong>n. Wenn aber das Z-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!