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

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

Schieben: sll, sla, srl, sra

Bits nach links und rechts schieben: Multiplizieren und Teilen durch Zweierpotenzen, Felder herauslösen und das Vorzeichen behalten.

Lektion 14 Min. Woche 40

Das lernst du heute

  • Links und rechts schieben
  • Logisch oder arithmetisch
  • Schieben als Multiplikation

Gestern hast du Bits mit and, or und xor gesetzt, gelöscht und geprüft. Heute bewegst du sie. Vier Befehle schieben alle Bits einer Zahl um eine Anzahl Stellen:

Befehlmacht
sll r? a nschiebt a um n Stellen nach links, rechts kommen Nullen nach
sla r? a ndasselbe wie sll – im Spiel ist es dieselbe Operation
srl r? a nschiebt nach rechts, links kommen Nullen nach
sra r? a nschiebt nach rechts, links kommt das Vorzeichen nach

Schieben ist Rechnen

Eine Stelle nach links verdoppelt eine Zahl, eine Stelle nach rechts halbiert sie und schneidet den Rest ab:

move r0 %0000_0101   # 5
sll r1 r0 3          # %0010_1000 = 40, also 5 * 8
srl r2 r1 2          # %0000_1010 = 10, also 40 / 4

Mit Kommazahlen funktioniert das nicht: Vor jedem Bitbefehl wandelt der Chip den Wert in eine Ganzzahl um, der Nachkommaanteil fällt dabei weg.

Logisch oder arithmetisch?

Bei positiven Zahlen sind srl und sra gleich. Bei negativen Zahlen nicht: Negative Zahlen haben links lauter Einsen. sra schiebt diese Einsen nach – das Vorzeichen bleibt, aus −64 wird −16. srl schiebt Nullen nach und macht aus einer kleinen negativen Zahl eine riesige positive.

move r3 -64
sra r4 r3 2          # -16
Tipp

Merkhilfe: a wie arithmetisch – rechnet mit Vorzeichen. l wie logisch – schiebt nur Bits.

Felder herausholen

Oft stecken mehrere kleine Werte in einer Zahl, etwa vier Bits für einen Zustand ab Bit 4. Erst nach rechts schieben, dann mit einer Maske abschneiden:

srl r5 r0 4          # Bit 4 rutscht auf Bit 0
and r5 r5 %1111      # nur die unteren vier Bits behalten

Übermorgen lernst du ext, das genau diese zwei Schritte in einem erledigt. Wie es intern funktioniert, verstehst du aber erst mit srl und and.

Achtung

Bitbefehle arbeiten auf 64-Bit-Ganzzahlen, Register speichern aber Kommazahlen mit 53 Bit Genauigkeit. Alles, was über 53 Bit hinausgeht, kommt nicht verlustfrei zurück.

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
Jedes Register ist eine Kommazahl. Für Bitbefehle wandelt der Chip sie in eine 64-Bit-Ganzzahl um und danach zurück.

Übung

Aufgabe

In r0 steht eine positive Ganzzahl, in r5 eine negative (setzt der Test). Ohne mul und div:

  • r1 = r0 · 8
  • r2 = r0 / 4 (abgerundet)
  • r3 = r5 / 4 mit Vorzeichen
  • r4 = die Bits 4 bis 7 von r0 als Zahl von 0 bis 15

Hinweise

Hinweis 1

Mal 8 ist drei Stellen nach links: sll r1 r0 3.

Hinweis 2

Durch 4 ist zwei Stellen nach rechts – für r5 mit sra, damit das Vorzeichen bleibt.

Hinweis 3

Bits 4 bis 7: erst srl r4 r0 4, dann and r4 r4 %1111.

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