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

Tag 278 von 365 · Experte · Monat 10: Bits und Daten

Bitfelder: ext und ins

ext holt ein Bitfeld heraus, ins setzt eins ein: Felder herausziehen und einsetzen, die Grenze von 53 Bit und mehrere Werte in einem Statuswort.

Lektion 16 Min. Woche 40

Das lernst du heute

  • Felder herausziehen und einsetzen
  • Höchstens 53 Bit
  • Werte packen

Vorgestern hast du Felder mit srl und and herausgeholt. Zwei Befehle erledigen das in einer Zeile – und auch den umgekehrten Weg.

ext: ein Feld herausziehen

ext r? a start länge holt aus a das Feld ab Bit start mit länge Bits und legt es rechtsbündig ins Register:

ext r0 %1101_0110 4 4   # Bits 4–7: %1101 = 13
ext r1 %1101_0110 1 2   # Bits 1–2: %11 = 3

Das entspricht srl plus and mit einer Maske aus länge Einsen.

ins: ein Feld einsetzen

ins r? wert start länge schreibt die unteren länge Bits von wert ab Bit start in das Register und lässt alle anderen Bits stehen. Das Register ist Ziel und Ausgangswert:

move r0 $FF          # %1111_1111
ins r0 0 2 3         # Bits 2–4 auf 0: 227
ins r0 5 2 3         # Bits 2–4 auf %101: 247

Ist wert zu groß für das Feld, schneidet ins ab: Nur die unteren länge Bits kommen hinein.

Höchstens 53 Bit

Ein Feld darf nicht über Bit 52 hinausreichen: start + länge höchstens 53, länge mindestens 1. Sonst hält der Chip mit einem Fehler an (PayloadOverflow, ShiftOverflow oder ShiftUnderflow). Das ist die 53-Bit-Grenze der Kommazahl vom Montag.

Werte packen

Mit Feldern packst du mehrere kleine Werte in eine Zahl. Ein Beispiel für eine Pumpstation:

BitsFeldBereich
0–3Zustand0–15
4–11Druck in 10-kPa-Schritten0–255
12Alarm0–1

13 Bits für drei Werte: ein Register oder ein Stack-Platz statt drei. Nächste Woche nutzt du das, um Werte zwischen Chips zu verschicken.

Achtung

Ein Feld nimmt nur ganze, nicht negative Zahlen. 101,3 wird beim Einsetzen zu 101, und −5 landet als Bitmuster aus lauter Einsen im Feld. Runde vorher und halte negative Werte draußen.

Schaubild

Die Registerbank des Chips r0 42 r1 31 r2 10 r3 -2.5 r4 0 r5 0 r6 0 r7 0 r8 0 r9 0 r10 0 r11 0 r12 0 r13 0 r14 0 r15 0 sp = r16 ra = r17 16 freie Register, je eine Zahl sp: Stapelzeiger · ra: Rücksprungadresse
Ein Feld ist ein Bereich von Bits mit Startbit und Länge. ext liest ihn, ins schreibt ihn.

Übung

Aufgabe

In paket (r0) steckt das Statuswort der Pumpstation (Tabelle oben). Ohne srl und and:

  • zustand = Bits 0–3
  • druck = Bits 4–11 mal 10, also in kPa
  • alarm = Bit 12
  • neu = dasselbe Paket, aber mit Zustand 9

Hinweise

Hinweis 1

ext zustand paket 0 4 holt den Zustand.

Hinweis 2

Druck: ext druck paket 4 8, dann mul mit DRUCKSCHRITT.

Hinweis 3

Neues Paket: erst move neu paket, dann ins neu 9 0 4.

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