IC10 kennt kein if und keine Schleifenbefehle. Alles läuft über Sprünge zu Labels.
Labels
Ein Label ist ein Name mit Doppelpunkt, allein auf seiner Zeile:
heiss:
Es tut selbst nichts, markiert aber die Zeile als Sprungziel. Steht noch etwas dahinter (heiss: s d1 On 1), versteht der Chip die Zeile nicht.
Unbedingt springen: j
j start springt immer. Damit baust du die Hauptschleife.
Bedingt springen
| Befehl | springt, wenn |
|---|---|
beq a b ziel | a = b |
bne a b ziel | a ≠ b |
bgt a b ziel | a > b |
bge a b ziel | a ≥ b |
blt a b ziel | a < b |
ble a b ziel | a ≤ b |
beqz a ziel / bnez a ziel | a = 0 / a ≠ 0 |
Ist die Bedingung falsch, macht der Chip einfach mit der nächsten Zeile weiter.
start:
yield
l r0 d0 Temperature
bgt r0 303.15 heiss # waermer als 30 C?
s d1 On 0 # nein: Lampe aus
j start
heiss:
s d1 On 1 # ja: Lampe an
j start
Befehle mit br am Anfang (breq, brgt …) und jr springen relativ um eine Anzahl Zeilen. Ein Label ist dort fast immer falsch, weil seine Zeilennummer einfach addiert wird. Für Labels immer die Varianten ohne r nehmen.
Spring nie auf Zeilennummern wie j 5. Fügst du oben eine Zeile ein, landet der Sprung woanders. Labels wandern mit.
Schaubild
Übung
Aufgabe
Ein Warnlicht an d1 soll leuchten, wenn der Sensor an d0 mehr als 30 °C (303,15 K) misst – sonst aus. Löse das mit einem bedingten Sprung (bgt, blt …) in einer Endlosschleife.
Hinweise
Hinweis 1
bgt r0 303.15 heiss springt zum Label heiss:, wenn es wärmer ist.
Hinweis 2
Vergiss nach jedem Zweig das j start nicht – sonst läuft der Chip in den anderen Zweig hinein.