		Przesuniecia, obroty i rozkazy logiczne

SHL rejestr lub zmienna,liczba    przesuniecie logiczne w lewo
SAL rejestr lub zmienna,liczba    przesuniecie arytmetyczne w prawo
SHR rejestr lub zmienna,liczba    przesuniecie logiczne w prawo
SAR rejestr lub zmienna,liczba    przesuniecie arytmetyczne w prawo
ROL rejestr lub zmienna,liczba    obrot w lewo
RCL rejestr lub zmienna,liczba    obrot w lewo z przeniesieniem
ROR rejestr lub zmienna,liczba    obrot w prawo
RCR rejestr lub zmienna,liczba    obrot w prawo z przeniesieniem
=============================================================================
                             SHL i SAL
          ____________________________________________________
 ---     |                                                    |
| C | <--| 7  <-- 6  <-- 5  <-- 4  <-- 3  <-- 2  <-- 1 <-- 0  |<--0
 ---     |____________________________________________________|

mov al,15h   ;00010101b
moc cl,2
shl al,cl
wynik:AL=54h ;01010100b
 
                                SHR
          ____________________________________________________
         |                                                    |    ---
    0 -->| 7  --> 6  --> 5  --> 4  --> 3  --> 2  --> 1 --> 0  |-->| C |
         |____________________________________________________|    ---

mov al,15h   ;00010101b
mov cl,3
shr  al,cl
wynik:AL=02h  00000010b
Znacznik C ustawiony..

                                 SAR
          ____________________________________________________
         |                                                    |    ---
         | 7  --> 6  --> 5  --> 4  --> 3  --> 2  --> 1 --> 0  |-->| C |
         |_|__|_______________________________________________|    ---
           |__|

mov al,0A3h      ;10100011b
mov cl,4
sar al,cl
AL=0FAh  ;1111010b
Znacznik C wyzerowany
                                  ROL

          ____________________________________________________
 ---     |                                                    |
| C | <--| 7  <-- 6  <-- 5  <-- 4  <-- 3  <-- 2  <-- 1 <-- 0  |<--|
 ---   | |____________________________________________________|   |
       |__________________________________________________________|

mov al,15h   ;00010101b
rol al,1
Wynik:AL=2Ah   ;00101010b

                                  RCL
              ____________________________________________________
     ---     |                                                    |
 - -| C | <--| 7  <-- 6  <-- 5  <-- 4  <-- 3  <-- 2  <-- 1 <-- 0  |<--|
 |   ---     |____________________________________________________|   |
 |____________________________________________________________________|

mov al,15h   ;00010101b
mov cl,3
rcl al,cl
Wynik:AL=A8h   ;10101000b
Znacznik C wyzerowany

                                   ROR

          ____________________________________________________
         |                                                    |      ---
    |--->| 7  --> 6  --> 5  --> 4  --> 3  --> 2  --> 1 --> 0  |--|--| C |
    |    |____________________________________________________|  | > ---
    |____________________________________________________________|

Zakladajac ze wskaznik C jest wyzeroway

mov al,21h    ;00100001b
ror al,1
Wynik:Al=90h  ;10010000b

Znacznyik C ustawiony

                                    RCR
          ____________________________________________________
         |                                                    |   ---
    |--->| 7  --> 6  --> 5  --> 4  --> 3  --> 2  --> 1 --> 0  |--| C |--
    |    |____________________________________________________|   ---  |
    |__________________________________________________________________|

Przy zalozeniu ze znacznik C jet ustawiony
mov al,0cdh   ;11001101b
mov cl,2
rcr al,cl
Wynik:AL=F3h  11110011b
Znacznik C wyzerowany

Jesli np.chodzi o zwiekszenie wydajnosci programow(predkosc) mozna stosowac
przesuniecia w prawo lub lewo zamiast mnozenia lub dzielenia.Jednak mnozyc
i dzielic w ten sposob jednynie przez potege dwojki.(przyklad)

mov al,32   ;0010000b
mov cl,4
shr al,cl
Wynik:AL=2 ;00000010b czyli 32/16

mov al,4  ;00000100b
moc cl,3  ;2^3=8
shl al,cl
Wynik AL=32  ;4*8

                        NOT rejestr lub zmienna

Jest to negacja logiczna.Dzialanie polega na zamianie kazdego bitu argumentu na
przeciwny.

mov ax,14B5h;   ;0001010010110101b
not ax
Wynik:AX=0EB4Ah (1110101101001010b)

            AND rejestr lub zmienna,rejestr,zmienna lub wartosc
           TEST rejestr lub zmienna,rejestr,zmienna lub wartosc
            OR  rejestr lub zmienna,rejestr,zmienna lub wartosc
           XOR  rejestr lub zmienna,rejestr,zmienna lub wartosc

             AND            OR              XOR 
        -----------------------------------------------
       | A    B    W   | A    B    W   | A    B    W   |
       |-----------------------------------------------|
       | 0    1    0   | 0    1    1   | 0    1    1   |
       | 1    0    0   | 1    0    1   | 1    0    1   |
       | 1    1    1   | 1    1    1   | 1    1    0   |
        -----------------------------------------------

mov   al,2ch   ;00101100b
mov   bl,65h   ;01100101b
and   al,bl

Wynik:AL=24h   ;00100100b

mov   al,59h   ;01011001b
mov   bl,9bh   ;10011011b
or    al,bl

Wynik:AL=DBh  ;11011011b

mov   al,57h  ;01010111b
mov   bl,0C2h ;11000010b
xor   al,bl

Wynik:AL=95h   ;10010101b

material:
Andrzej Dudek "Jak pisac wirusy"
Muzyka:Sugar Ray 

