shl - shift left (schiebt nach links)
shr - shift right (schiebt nach rechts)
sal - shift arithmetic left (artimetisches Schieben nach links)
sar - shift arithmetic right (artimetisches Schieben nach rechts)
Die shl Syntax:
shl Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht
übertreten.
Effekt:
Die Bits der Destination schieben sich nach links mit "Nummer"
Positionen. Das niederwertige Bit (oder Bits) erhaltet den Wert 0.
Das zuletzt ausgehende Bit wird in CF gespeichert.
Beispiel:
mov al, 00110011b
mov cl, 2
shl al, cl ; -> al = 11001100b, CF = 0
Die shr Syntax:
shr Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht übertreten.
Effekt:
Die Bits der Destination schieben sich nach rechts mit "Nummer"
Positionen. Das höchstwertige Bit (oder Bits) erhaltet den Wert 0.
Das zuletzt ausgehende Bit wird in CF gespeichert.
Beispiel:
mov al, 01011110b
mov cl, 2
shr al, cl ; -> al = 00010111b, CF = 1
Die sar Syntax:
sar Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht übertreten.
Effekt:
Die Bits der Destination schieben sich nach rechts mit "Nummer"
Positionen. Das höchstwertige Bit (oder Bits) erhaltet den Wert des Vorzeichenbits.
(das höchstwertige Bit vor dem Schieben)
Das zuletzt ausgehende Bit wird in CF gespeichert.
Beispiel:
mov al, 11011110b
mov cl, 2
sar al, cl ; -> al = 11110111b, CF = 1
Die sal Syntax : identisch mit der shl Syntax
rol - rotate left
ror - rotate right
rcl - rotate through carry left
rcr - rotate through carry right
Die rol Syntax:
rol Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht übertreten.
Effekt:
Die Bits der Destination werden nach links mit "Nummer"
Positionen rotiert. Das am links ausgehende Bit erscheint im rechten Teil
der Destination. Das zuletzt rotierte Bit wird immer in CF gespeichert.
Beispiel:
mov al, 00110011b
mov cl, 2
rol al, cl ; -> al = 11001100b, CF = 0
Die ror Syntax:
ror Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht übertreten.
Effekt:
Die Bits der Destination werden nach rechts mit "Nummer"
Positionen rotiert. Das am rechts ausgehende Bit erscheint im linken Teil
der Destination. Das zuletzt rotierte Bit wird immer in CF gespeichert.
Beispiel:
mov al, 00111110b
mov cl, 2
ror al, cl ; -> al = 10001111b, CF = 1
Die rcl Syntax:
rcl Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht übertreten.
Effekt:
Die Bits der Destination werden nach links mit "Nummer"
Positionen rotiert. Jedes am links ausgehende Bit wird in CF gespeichert.
Der voriger Wert von CF wird im rechten Teil der Destination erscheinen.
Beispiel:
stc; CF = 1 (set carry)
mov al, 00110011b
mov cl, 2
rcl al, cl ; -> al = 11001110b, CF = 0
Die rcr Syntax:
rcr Destination, Nummer
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein.
- Nummer kann 1 oder das Register cl sein; der Wert in cl soll 31 nicht übertreten.
Effekt:
Die Bits der Destination werden nach rechts mit "Nummer"
Positionen rotiert. Jedes am rechts ausgehende Bit wird in CF gespeichert.
Der voriger Wert von CF wird im linken Teil der Destination erscheinen.
Beispiel:
stc; CF = 1 (set carry)
mov al, 00110011b
mov cl, 2
rcr al, cl ; -> al = 11001100b, CF = 1
Logische Operationen
and - Logisches Und
or - Logisches Oder
xor - ausschließliches
not - Logische Negation
Die and, or, xor, not Syntax:
and Destination, Quelle
or Destination, Quelle
xor Destination, Quelle
not Destination
- Die Destination kann ein 1 oder 2 Byte Register oder eine 1 oder 2 Byte
Speicherstelle sein
- Die Quelle kann ein 1 oder 2 Byte Register, Speicherstelle oder Konstante sein
- Beide sollen die gleiche Größe haben und dürfen nicht beide gleichzeitig
Speicherstellen sein
Effekt:
Destination = Destination and Quelle
Destination = Destination or Quelle
Destination = Destination xor Quelle
Destination = not Destination
and| 0 1
---|------
0 | 0 0
1 | 0 1
or| 0 1
---|------
0 | 0 1
1 | 1 1
xor| 0 1
---|------
0 | 0 1
1 | 1 0
not|
---|---
0 | 1
1 | 0
Bemerkung: die Bitmanipulationsbefehle ändern auch das OF Flag.
Für mehrere Informationen schauen Sie in Norton Guide nach.
************************************************************************
Eine Nummer kann als Binärzahl bezeichnet werden wenn sie von einem Charakter "b"
gefolgt ist.
Beispiel:
a db 10011001b
a db 153
a db 99h
entspricht der gleichen Oktettdeklaration.
Überprüfung des Carry Flags (CF)
Der Wert des Carry Flags kann mit der Hilfe des Befehls jc (jump if carry) überprüft werden.
Beispiel:
mov al, 19
shr al, 1 ; in CF wird das auf rechts ausgehende Bit gespeichert (der Rest der
; Division von al durch 2)
jc ungerade
; der Wert von al ist gerade
jmp durchspringen
ungerade:
; der Wert von al ist ungerade
durchspringen:
In Assembler-Sprache gibt es Pseudooperationen, den logischen Operationen and,
or, xor, not, shl, shr entsprechend.
Die and, or, xor Syntax:
Expression1 and Expression2
Expression1 or Expression2
Expression1 xor Expression2
Die not Syntax:
not Expression
Die shl, shr Syntax:
Expression1 shl Nummer
Expression1 shr Nummer
Bemerkung: Alle Ausdrücke (Expression) sollen während der Übersetzung ausrechenbar sein.
Es ist falsch:
mov al, a or b
Es ist aber richtig:
mov al, 1 or 7