Das lernst du heute
- Pin-Nummer aus einem Register
- Register über Register
- Schleife über Pins
Im Schaltschrank hängen vier Sensoren an d0 bis d3. Vier fast gleiche Blöcke zu schreiben, ist lästig, und mit sechs Pins wird es nicht schöner. Besser: Die Pinnummer steht in einem Register, und eine Schleife geht sie durch.
dr0: Pin aus einem Register
dr2 heißt: der Pin, dessen Nummer gerade in r2 steht. Steht in r2 eine 3, ist dr2 dasselbe wie d3.
move i 0
pin:
l temp dr0 Temperature # dr0: Pin mit der Nummer aus r0
add i i 1
blt i 4 pin
Das funktioniert überall, wo ein Pin stehen darf: l, s, ls, sdse, bdns und so weiter.
In dr0 steht die Registernummer, nicht der alias. Ist i ein alias für r0, heißt der Pin trotzdem dr0. Ein dri gibt es nicht. Legt jemand den alias auf ein anderes Register, muss dr0 mitwandern.
rr1: Register über Register
Dasselbe gibt es für Register. rr1 heißt: das Register, dessen Nummer in r1 steht.
move r1 10
move rr1 42 # schreibt 42 nach r10
add r1 r1 1
move rr1 43 # schreibt 43 nach r11
So legst du eine kleine Tabelle in den Registern an, etwa die Temperaturen von vier Pins in r10 bis r13. Mehrere r gehen auch: rrr1 liest erst r1, nimmt den Wert als Registernummer, liest dort und nimmt diesen Wert als Nummer.
Liegt eine Registernummer außerhalb von 0 bis 17, meldet der Chip OutOfRegisterBounds. Eine Pinnummer außerhalb von 0 bis 5 führt ebenfalls zu einem Fehler.
Schleife über Pins
Zusammen ergibt das eine Schleife, die jeden Pin prüft, liest und den Wert in ein eigenes Register legt:
move i 0
pin:
add ziel i 10 # Zielregister r10 bis r13
move rr1 0 # Startwert, falls der Pin leer ist
bdns dr0 weiter
l rr1 dr0 Temperature
weiter:
add i i 1
blt i 4 pin
Hier ist i ein alias für r0 und ziel ein alias für r1.
Für Tabellen mit mehr als ein paar Einträgen ist der Stack besser. Register sind knapp, und rr frisst sie schnell. Der Stack kommt in Woche 18.
Schaubild
Übung
Aufgabe
An d0 bis d3 können Gassensoren hängen, manche Pins sind leer.
- Lies in einer Schleife über die Pins die Temperaturen nach
r10bisr13(Pind0→r10usw.), mitdr0undrr1. - Ein leerer Pin ergibt 0 in seinem Register.
- Schreib die höchste Temperatur (in K) als
Settingaufs Gehäuse (db), 0 wenn kein Sensor da ist.
Hinweise
Hinweis 1
i ist r0, also heißt der Pin dr0. ziel ist r1, also heißt das Zielregister rr1.
Hinweis 2
In der Schleife: add ziel i 10, move rr1 0, bdns dr0 weiter, l rr1 dr0 Temperature.
Hinweis 3
Das Maximum sammelst du mit max hoechst hoechst rr1.
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