Das lernst du heute
- Index berechnen
- Schleife über Einträge
- Werte suchen
Vor der Hütte steht ein Eingangsspind. Nur Erze dürfen hinein, alles andere soll eine Warnlampe auslösen. Welche Erze erlaubt sind, steht in einer Tabelle im Stack. Der Chip sucht darin nach dem Teil im Fach.
Index berechnen
Eine Tabelle beginnt an einer festen Adresse, dem Anfang. Eintrag Nummer i liegt bei Anfang + i:
define TABELLE 10 # erste Adresse der Tabelle
add adr TABELLE i
get eintrag db adr
Lass die Tabelle nicht bei 0 beginnen, wenn du auch push benutzt. Ein fester Anfang wie 10 oder 400 hält sie vom push-Stapel fern. Und wer später eine zweite Tabelle braucht, legt sie einfach dahinter.
Schleife über die Einträge
Gefüllt wird einmal vor dem Start-Label, mit einer wandernden Adresse:
move adr TABELLE
poke adr EISEN
add adr adr 1
poke adr KUPFER
Gelesen wird in einer Schleife mit Zähler, wie du sie von den Fächern kennst:
move i 0
suche:
bge i ANZAHL fertig # alle Eintraege durch
add adr TABELLE i
get eintrag db adr
beq teil eintrag gefunden # Treffer: sofort raus
add i i 1
j suche
Werte suchen
Die Suche oben bricht beim ersten Treffer ab. Das spart Befehle, vor allem bei langen Tabellen. Prefab-Hashes sind ganze Zahlen, deshalb ist der exakte Vergleich mit beq hier richtig. Bei Messwerten wäre er es nicht.
Andere Suchen folgen demselben Muster: das größte Element finden (mit max über alle Einträge), die Position eines Werts merken (i beim Treffer festhalten), zählen, wie oft etwas vorkommt.
Eine Schleife über eine lange Tabelle kostet Befehle. Pro Eintrag sind es hier sechs. Bei 128 Befehlen pro Takt passt eine Tabelle mit rund 20 Einträgen noch in einen Takt. Wird sie länger, verteilt sich die Suche auf mehrere Takte. Das ist kein Fehler, aber die Antwort kommt später.
Fehlt der Spind, ist teil NaN, und beq findet nie einen Treffer. Mach daraus eine Regel: ohne Spind keine Warnung und kein „erlaubt“.
Schaubild
Übung
Aufgabe
Der Eingangsspind „Eingang“ (StructureLockerSmall) darf in Fach 0 nur Erze aus der Tabelle bekommen.
- Füll vor dem Start-Label ab Adresse
TABELLEdie Hashes von Eisen-, Kupfer-, Gold- und Siliziumerz. - Durchsuch die Tabelle nach
OccupantHashaus Fach 0 und brich beim Treffer ab. - Wandleuchte „Erlaubt“ an, wenn das Teil in der Tabelle steht. Blinklicht „Fremdteil“ an, wenn etwas im Fach liegt, das nicht in der Tabelle steht.
- Leeres Fach oder fehlender Spind: beide aus.
Hinweise
Hinweis 1
Füllen: move adr TABELLE, dann abwechselnd poke adr … und add adr adr 1.
Hinweis 2
Occupied mit sgtz absichern – NaN wird 0 und darf nie in ein and.
Hinweis 3
Suche: bge i ANZAHL fertig, Adresse berechnen, get, beq teil eintrag gefunden, i erhöhen, zurück.
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