Das lernst du heute
- Abschnitte und Registerplan
- Unterprogramme sinnvoll schneiden
- Platz sparen
Die Absaugung aus Tag 136 ist gewachsen: Die Anzeige wird jetzt in der Störung rot, bald kommt ein zweiter Raum dazu. Irgendwann stößt jeder größere Chip an die Grenzen – 128 Zeilen, 90 Zeichen pro Zeile und vor allem 4096 Zeichen. Mit deutschen Kommentaren ist meist das Zeichenlimit zuerst voll. Und lange bevor es so weit ist, findest du in einem ungegliederten Chip deine eigenen Fehler nicht mehr.
Eine feste Reihenfolge
| Teil | Inhalt |
|---|---|
| Kopf | define für Geräte, Zustände und Grenzwerte, dann alle alias |
| Start | Werte, die vor der Schleife gesetzt werden |
| 1. Eingänge | alle lbn an einer Stelle, die NaN-Prüfung direkt dahinter |
| 2. Zustände | Sprungtabelle und ein Block je Zustand |
| 3. Ausgabe | neuen Zustand übernehmen, alle sbn an einer Stelle |
| Unterprogramme | hinter j start |
Wer so baut, weiß bei jedem Fehler, wo er suchen muss: falscher Messwert → Abschnitt 1, falscher Zustand → Abschnitt 2, Gerät tut nichts → Abschnitt 3.
Der Registerplan
16 Register klingen nach viel, sind aber schnell verteilt. Leg im Kopf fest, wofür jedes da ist, und halte dich daran:
# Register: r0-r2 Zustand und Zaehler
# r3-r7 Hauptprogramm
# r8 nur fuer das Unterprogramm anzeige
alias zustand r0
alias takte r2
alias farbe r8
Die wichtigste Regel: Ein Unterprogramm benutzt nur seine eigenen Register. Rechnet es mit tmp, während der Aufrufer in tmp noch einen Wert braucht, ist der Wert nach j ra weg – ohne Fehlermeldung, und der Fehler zeigt sich an einer ganz anderen Stelle.
Unterprogramme sinnvoll schneiden
Ein Unterprogramm kostet mindestens zwei Zeilen extra: jal und j ra. Es lohnt sich, wenn
- derselbe Code an mehreren Stellen gebraucht wird, zum Beispiel „alles aus“ bei jeder Störung,
- ein abgeschlossener Teil die Hauptschleife unübersichtlich macht, etwa die Anzeige mit Zahl und Farbe.
Ein Unterprogramm für eine einzige Zeile lohnt sich nie. Und eines, das selbst wieder jal aufruft, braucht push ra und pop ra.
jal anzeige # Status und Farbe
# ... restliche Ausgabe ...
j start
anzeige:
seq farbe zustand STOERUNG
select farbe farbe ROT GRUEN
sbn ANZEIGE HASH("Status") Color farbe
j ra
Platz sparen
- Kommentare kurz halten. Einer pro Abschnitt und einer hinter jedem
definereicht. Jedes Zeichen zählt, auch Leerzeichen. - Ausgaben nur einmal schreiben. Ein
sbnpro Gerät in der Ausgabe statt einem in jedem Zustandsblock. selectstatt Sprüngen.select neu tmp VOLL neubraucht kein Label und keinen Rücksprung.- Leerzeilen weglassen. Jede zählt als Zeile.
Kürzen nie auf Kosten der Sicherheit: Die NaN-Prüfung und der Fang-Zweig bleiben drin, auch wenn es eng wird. Lieber einen Kommentar kürzen als einen Schutz streichen.
Übung
Aufgabe
Die Absaugung hat ein Unterprogramm anzeige bekommen: Es schreibt die Zustandsnummer und färbt die Anzeige „Status“ in der Störung rot, sonst grün. Seitdem stimmt die Zeitmessung nicht mehr: Der Nachlauf endet sofort, und wer nach einer Wartezeit in Bereit die Taste drückt, landet gleich in der Störung.
Finde den Registerkonflikt und behebe ihn nach dem Registerplan im Kopf des Programms. Das Verhalten sonst bleibt wie in Tag 136.
Hinweise
Hinweis 1
Was steht in tmp, wenn nach jal anzeige die Zeile select takte tmp takte 0 läuft?
Hinweis 2
Das Unterprogramm rechnet die Farbe in tmp aus und überschreibt damit das Ergebnis von seq tmp neu zustand.
Hinweis 3
Laut Registerplan gehört r8 dem Unterprogramm: Ersetz dort tmp durch farbe.
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