stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 121

Tag 121 von 365 · Fortgeschritten · Monat 5: Speicher und Struktur

poke und der Stack als Tabelle

poke schreibt an eine feste Adresse im Stack, ohne sp zu bewegen. Mit festen Adressen wird der Stack zur Tabelle, die du mit get ausliest.

Lektion 12 Min. Woche 18

Das lernst du heute

  • poke schreibt an eine Adresse
  • sp bleibt stehen
  • Stack als Tabelle nutzen

Mit push und pop arbeitet der Stack wie ein Tellerstapel. Manchmal willst du aber an eine bestimmte Stelle schreiben, ohne alles darüber abzuräumen. Dafür gibt es poke.

poke schreibt an eine Adresse

poke 5 293.15     # Adresse 5 = 293.15
get r0 db 5       # r0 = 293.15

poke adresse wert schreibt den Wert direkt an die Adresse. Gelesen wird mit get r? db adresse, das kennst du schon. Beide verändern sp nicht.

Befehlschreibt / liestsp
push wertan Adresse spwird 1 größer
pop r?von Adresse sp − 1wird 1 kleiner
poke adr wertan Adresse adrbleibt
put db adr wertan Adresse adrbleibt
get r? db adrvon Adresse adrbleibt

poke adr wert und put db adr wert tun dasselbe. poke ist kürzer, put kann zusätzlich in den Stack anderer Geräte schreiben.

Der Stack als Tabelle

Mit festen Adressen wird der Stack zu einer Tabelle. Ein Beispiel: fünf Lichtprogramme für die Bar, jedes mit einer Farbe:

poke 0 Color.White
poke 1 Color.Blue
poke 2 Color.Green
poke 3 Color.Orange
poke 4 Color.Red

Das Füllen steht vor dem Start-Label und läuft einmal. In der Hauptschleife reicht dann ein get:

lbn prog RAD HASH("Barlicht") Setting Average
get farbe db prog

Die Stellung des Dials ist direkt die Adresse in der Tabelle.

Achtung

Eine Adresse über 511 meldet StackOverFlow, eine negative StackUnderFlow. Kommt die Adresse von außen, etwa von einem Dial, begrenzt du sie vorher mit max und min. Auch NaN gehört nicht in eine Adresse, fang es vorher ab.

Tipp

Mischst du push und poke im selben Stack, leg die Tabelle an feste Adressen weit oben, etwa ab 400. Der push-Stapel wächst von 0 an nach oben und kommt ihr dann so schnell nicht in die Quere.

Schaubild

Der Stack mit Stapelzeiger Platz 0 10 Platz 1 20 Platz 2 30 Platz 3 Platz 4 sp = 3 nächster freier Platz push 40 pop r0 r0 = 30 zuletzt rein, zuerst raus
push und pop arbeiten oben am Stapel und bewegen sp. poke und get greifen auf eine feste Adresse zu.

Übung

Aufgabe

Fünf Lichtprogramme für die Bar. Das Dial „Barlicht“ wählt das Programm 0 bis 4, die LEDs „Bar“ (StructureDiode) bekommen die Farbe.

  • Füll vor dem Start-Label mit poke die Tabelle: 0 Color.White, 1 Color.Blue, 2 Color.Green, 3 Color.Orange, 4 Color.Red.
  • Lies in der Schleife die Farbe mit get aus der Tabelle.
  • Begrenze die Stellung auf 0 bis 4. Fehlt das Dial, gilt Programm 0. sp bleibt dabei 0.

Hinweise

Hinweis 1

Fünf poke-Zeilen vor start:.

Hinweis 2

NaN mit snan und select durch 0 ersetzen, dann max … 0 und min … LETZTES.

Hinweis 3

get farbe db prog holt die Farbe, ohne sp zu ändern.

Quiz

4 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Übung im Simulator bestanden
  • Quiz mit mindestens 60 % bestanden

Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.

Fehler in dieser Lektion melden

Zum Melden bitte anmelden. Anmelden

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall