Bitmanipulationsbefehle

 

Bitschiebebefehle

 

 

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

 

Rotationsbefehle

 

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 Oder

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.

 

 

************************************************************************

Spezifikation der Binärzahlen

 

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:

 

 

Pseudobitoperationen

 

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