beginner_de
beginner_de
beginner_de
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-