Shift und Rotate
|
|
Kapitel in Arbeit !
|
|
|
|
Logical Shift
Diese Operation wird zur Arbeit mit Bit-Mustern verwendet, z.B. um ein oder
mehrere Bits einer Variablen zu isolieren.
Das entfernte Bit wird jeweils in die carry-Position gesetzt, das neu eingesetzte
Bit ist immer 0.
Die carry-Position ist ein 1-Bit Speicher außerhalb jenes Registers, in
dem sich die Variable befindet. Man verwendet carry u.a. zur Verkettung mehrerer
Register.
|
LSL
| n | a << n |
| 0 | 0 00000000 | 0 |
| 1 | 0 00000000 | 0 |
| 2 | 0 00000000 | 0 |
| 3 | 0 00000000 | 0 |
| 4 | 0 00000000 | 0 |
| 5 | 0 00000000 | 0 |
| 6 | 0 00000000 | 0 |
| 7 | 0 00000000 | 0 |
| 8 | 0 00000000 | 0 |
|
LSR
| n | a >> n |
| 0 | 0 00000000 | 0 |
| 1 | 0 00000000 | 0 |
| 2 | 0 00000000 | 0 |
| 3 | 0 00000000 | 0 |
| 4 | 0 00000000 | 0 |
| 5 | 0 00000000 | 0 |
| 6 | 0 00000000 | 0 |
| 7 | 0 00000000 | 0 |
| 8 | 0 00000000 | 0 |
|
|
Arithmetic Shift
Diese Operation arbeitet ähnlich wie der Logical Shift, nimmt jedoch
besondere Rücksicht auf das höchstwertige Bit. Dieses Bit trägt
in arithmetischen Operationen das Vorzeichen. Je nach Register-Breite (Wort-Breite)
des Prozessors ist dieses Bit die Nummer 7, 15, 31, ...
Beim Shift nach rechts (ASR) wird das neu eingesetzte Bit gleich dem vorherigen
Vorzeichen-Bit gesetzt (sign preserve).
|
ASL
| n | a |
| 0 | 0 00000000 | 0 |
| 1 | 0 00000000 | 0 |
| 2 | 0 00000000 | 0 |
| 3 | 0 00000000 | 0 |
| 4 | 0 00000000 | 0 |
| 5 | 0 00000000 | 0 |
| 6 | 0 00000000 | 0 |
| 7 | 0 00000000 | 0 |
| 8 | 0 00000000 | 0 |
|
ASR
| n | a |
| 0 | 0 00000000 | 0 |
| 1 | 0 00000000 | 0 |
| 2 | 0 00000000 | 0 |
| 3 | 0 00000000 | 0 |
| 4 | 0 00000000 | 0 |
| 5 | 0 00000000 | 0 |
| 6 | 0 00000000 | 0 |
| 7 | 0 00000000 | 0 |
| 8 | 0 00000000 | 0 |
|
|
Rotate
Die Rotate-Funktionen setzen das neue Bit gleich dem entfernten Bit.
Zusätzlich ist das jeweils bewegte Bit im carry verfügbar.
Manche Prozessoren bieten zusätzlich die Funktionen ROXL und ROXR
Sie arbeiten wie ROL und ROR, rotieren jedoch zusätzlich das carry-Bit.
In diesem Fall wird ein 8-Bit Register daher mit 9 Schritten vollständig
rotiert, ein 16-Bit Register mit 17 schritten usw.
|
ROL
| n | a |
| 0 | 0 00000000 | 0 |
| 1 | 0 00000000 | 0 |
| 2 | 0 00000000 | 0 |
| 3 | 0 00000000 | 0 |
| 4 | 0 00000000 | 0 |
| 5 | 0 00000000 | 0 |
| 6 | 0 00000000 | 0 |
| 7 | 0 00000000 | 0 |
| 8 | 0 00000000 | 0 |
|
ROR
| n | a |
| 0 | 0 00000000 | 0 |
| 1 | 0 00000000 | 0 |
| 2 | 0 00000000 | 0 |
| 3 | 0 00000000 | 0 |
| 4 | 0 00000000 | 0 |
| 5 | 0 00000000 | 0 |
| 6 | 0 00000000 | 0 |
| 7 | 0 00000000 | 0 |
| 8 | 0 00000000 | 0 |
|
|
Swap
Dieser Befehl wird von zwar den meisten Prozessoren angeboten, jedoch kaum in
Programmiersprachen. Er vertauscht die beiden Hälften eines Registers.
|
SWAP
| n | a |
| 0 | 00000000 | 0 |
| 1 | 00000000 | 0 |
| 2 | 00000000 | 0 |
|