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:
| Befehl | macht |
|---|---|
sll r? a n | schiebt a um n Stellen nach links, rechts kommen Nullen nach |
sla r? a n | dasselbe wie sll – im Spiel ist es dieselbe Operation |
srl r? a n | schiebt nach rechts, links kommen Nullen nach |
sra r? a n | schiebt 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
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.
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
Übung
Aufgabe
In r0 steht eine positive Ganzzahl, in r5 eine negative (setzt der Test). Ohne mul und div:
r1= r0 · 8r2= r0 / 4 (abgerundet)r3= r5 / 4 mit Vorzeichenr4= 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