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. 45<br />

.EQU MeineLieblingsZelle = 0x0060<br />

.DEF MeinLieblingsRegister = R1<br />

LDI YH, HIGH(MeineLieblingszelle)<br />

LDI YL, LOW(MeineLieblingszelle)<br />

Irgendwo später im Programm will ich dann auf Zelle 0x0062 zugreifen:<br />

STD Y+2, MeinLieblingsRegister<br />

Obacht! Die „plus zwei“ wer<strong>de</strong>n nur für <strong>de</strong>n Zugriff addiert, <strong>de</strong>r Registerinhalt von Y wird dabei<br />

nicht verän<strong>de</strong>rt. Zur weiteren Verwirrung <strong>de</strong>s Publikums geht diese Konstruktion nur mit <strong>de</strong>m Y-<br />

und <strong>de</strong>m Z-Pointer, nicht aber mit <strong>de</strong>m X-Pointer!<br />

Die korrespondieren<strong>de</strong> Instruktion für das indizierte Lesen eines SRAM-Bytes<br />

LDD MeinLieblingsRegister, Y+2<br />

ist ebenfalls vorhan<strong>de</strong>n.<br />

Das war es schon mit <strong>de</strong>m SRAM, wenn da nicht <strong>de</strong>r Stack noch wäre.<br />

8.5 Verwendung von SRAM als Stack<br />

Die häufigste und bequemste Art <strong>de</strong>r Nutzung <strong>de</strong>s SRAM ist <strong>de</strong>r Stapel, englisch stack genannt. Der<br />

Stapel ist ein Türmchen aus Holzklötzen. Je<strong>de</strong>s neu aufgelegte Klötzchen kommt auf <strong>de</strong>n schon<br />

vorhan<strong>de</strong>nen Stapel obenauf, je<strong>de</strong> Entnahme vom Turm kann immer nur auf das jeweils oberste<br />

Klötzchen zugreifen, weil sonst <strong>de</strong>r ganze schöne Stapel hin wäre. Das kluge Wort für diese Struktur<br />

ist Last-In-First-Out (LIFO) o<strong>de</strong>r schlichter: die Letzten wer<strong>de</strong>n die Ersten sein.<br />

Zur Verwirrung <strong>de</strong>s Publikums wächst <strong>de</strong>r Stapel bei fast allen Mikroprozessoren aber nicht von <strong>de</strong>r<br />

niedrigsten zu höheren Adressen hin, son<strong>de</strong>rn genau umgekehrt. Wir könnten sonst am Anfang <strong>de</strong>s<br />

SRAMs unsere schönen Datenstrukturen nicht anlegen.<br />

Einrichten <strong>de</strong>s Stapels<br />

Um vorhan<strong>de</strong>nes SRAM für die Anwendung als Stapel herzurichten ist zu allererst <strong>de</strong>r Stapelzeiger<br />

einzurichten. Der Stapelzeiger ist ein 16-Bit-Zeiger, <strong>de</strong>r als Port ansprechbar ist. Das Doppelregister<br />

heißt SPH:SPL. SPH nimmt das obere Byte <strong>de</strong>r Adresse, SPL das nie<strong>de</strong>rwertige Byte auf. Das gilt<br />

aber nur dann, wenn <strong>de</strong>r Chip über mehr als 256 Byte SRAM verfügt. An<strong>de</strong>rnfalls fehlt SPH und<br />

kann/muss nicht verwen<strong>de</strong>t wer<strong>de</strong>n. Wir tun im nächsten Beispiel so, als ob wir mehr als 256 Bytes<br />

SRAM haben.<br />

Zum Einrichten <strong>de</strong>s Stapels wird <strong>de</strong>r Stapelzeiger mit <strong>de</strong>r höchsten verfügbaren SRAM-Adresse bestückt.<br />

.DEF MeinLieblingsRegister = R16<br />

LDI MeinLieblingsRegister, HIGH(RAMEND) ; Oberes Byte<br />

OUT SPH,MeinLieblingsRegister ; an Stapelzeiger<br />

LDI MeinLieblingsRegister, LOW(RAMEND) ; Unteres Byte<br />

OUT SPL,MeinLieblingsRegister ; an Stapelzeiger<br />

Die Größe RAMEND ist natürlich prozessorspezifisch und steht in <strong>de</strong>r Inclu<strong>de</strong>-Datei für <strong>de</strong>n Pro-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!