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

Tag 106 von 365 · Fortgeschritten · Monat 4: Netzwerk im Detail

Relative Sprünge: br und jr

Relative Sprünge springen um eine Anzahl Zeilen statt zu einem Label. Ideal, um eine einzelne Zeile zu überspringen – und gefährlich, wenn man Zeilen einfügt.

Lektion 14 Min. Woche 16

Das lernst du heute

  • Offset statt Label
  • Breq, brne, brlt, brgt, brle, brge, jr
  • Warum Labels dort falsch sind

Bisher springt jeder Befehl zu einem Label. Es gibt eine zweite Familie: relative Sprünge. Sie springen nicht zu einer bestimmten Zeile, sondern um eine Anzahl Zeilen nach vorn oder zurück. Das ist praktisch, um mal eben eine einzige Zeile zu überspringen.

Abstand statt Label

Das r in breq steht für relativ. Der letzte Operand ist kein Ziel, sondern ein Abstand:

AbstandWirkung
1nächste Zeile, also kein Sprung
2eine Zeile überspringen
3zwei Zeilen überspringen
-1eine Zeile zurück
move heizen 1
brlt temp SOLL 2      # kalt: naechste Zeile auslassen
move heizen 0
sbn HEIZUNG HASH("Labor") On heizen

Ist es kalt, springt der Chip zwei Zeilen weiter, also über move heizen 0 hinweg. Sonst läuft er hinein und schaltet aus.

Die Familie

relativabsolutspringt, wenn
breq a b nbeqa = b
brne a b nbnea ≠ b
brlt a b nblta < b
brgt a b nbgta > b
brle a b nblea ≤ b
brge a b nbgea ≥ b
jr njimmer

Warum Labels dort falsch sind

Ein Label ist für den Chip nur eine Zahl: die Nummer der Zeile, in der es steht. Steht start: in Zeile 12 und schreibst du jr start, springt der Chip 12 Zeilen weiter, nicht zu Zeile 12. Das Programm landet irgendwo oder hinter dem Ende. Beim Speichern gibt es dafür keinen Fehler, der Prüfer im IC10-Coder meldet es aber.

Achtung

Beim Abstand zählt jede Zeile mit: Kommentarzeilen, Leerzeilen, Labelzeilen. Fügst du zwischen Sprung und Ziel eine Kommentarzeile ein, stimmt der Abstand nicht mehr. Relative Sprünge gehören deshalb nur über kurze Strecken ohne Kommentarzeilen dazwischen.

Tipp

Achte auf die Richtung bei NaN. Jeder Vergleich mit NaN ist falsch, also springt brlt dann nicht. Steht move heizen 1 vorn und das Ausschalten in der übersprungenen Zeile, geht die Heizung bei Sensorausfall aus. Andersherum aufgebaut, würde sie anspringen.

Schaubild

Ablauf mit bedingtem Sprung start: yield · l r0 r0 > 303.15? heiss: On 1 On 0 ja: bgt springt nein: nächste Zeile j start
Der letzte Operand ist ein Abstand: 1 ist die nächste Zeile, 2 überspringt eine Zeile, negative Werte gehen zurück.

Übung

Aufgabe

Gassensor „Labor“, Wandheizung „Labor“, LED-Anzeige „Labortemp“. Benutze für alle Entscheidungen relative Sprünge (breq, brne, brlt, brgt, brle, brge), keine absoluten Vergleichssprünge. Für die Hauptschleife darfst du j benutzen.

  • Heizung an unter 20 °C, sonst aus. Bei Sensorausfall aus.
  • Farbe der Anzeige: unter 18 °C Color.Blue, über 26 °C Color.Red, dazwischen Color.Green. Bei Sensorausfall Color.Red.
  • Die Anzeige zeigt die Temperatur in °C.

Hinweise

Hinweis 1

Heizung: move heizen 1, dann brlt temp SOLL 2 und move heizen 0.

Hinweis 2

Farbe: Grün als Standard, dann zwei Prüfungen mit je einer übersprungenen Zeile.

Hinweis 3

Prüf die NaN-Richtung: brge und brle springen bei NaN nicht – beide Zeilen laufen, die letzte setzt Rot.

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