
                               ASSEMBLY
                         Comandos e Instrues (Parte 6)
                                Aula nr. 10 de 26

    Mais  instrues  lgicas...   Falta-nos  ver  as  intrues  de
deslocamento de bits: SHL, SHR, SAL, SAR, ROL, ROR, RCL e RCR.

    A ltima letra  nas  instrues  acima  especifica  o sentido de
rotao (R = Right -> direita, L = Left -> esquerda).

    Para exemplificar a mecnica do funcionamento dessas  instrues
recorrerei a graficos (fica mais fcil assim).

    ķ
     SHL e SHR 
    Ľ

        SHL:
      Ŀ     Ŀ
      Carry<ĳ                  < 0
           
                 msb                lsb


        SHR:
                  Ŀ      Ŀ
           0 >                  >Carry
                        
                 msb                lsb

    SHR e SHL fazem o deslocamento dos bits em direo ao flag Carry
e  acrescentam  0  no  lugar  do ltimo bit que foi deslocado.  Essa
operao tem o mesmo efeito  de  multiplicar  por 2 (SHL) ou dividir
por 2 (SHR) um valor.  Com a vantagem  de  no  gastar  tanto  tempo
quanto as instrues DIV e MUL.

    SHR  a abreviao de  SHift  Right,  enquando  SHL  a de SHift
Left.


    ķ
     SAL e SAR 
    Ľ

    SAL funciona da mesma maneira que SHL.

        SAR: Ŀ
                 Ŀ      Ŀ
             >                  >Carry
                        
                 msb                lsb

    SAR  desloca todos os bits para a direita (o lsb vai para o flag
carry) e repete o contedo do antigo ltimo bit (que foi deslocado).

    SAR    a  abreviao  de  SHift  Arithmetic  Right.   Sendo  um
deslocamento aritimtico, no  poderia  de  desconsiderar o sinal do
dado deslocado (dai o motivo de repetir o bit mais significativo!).


    ķ
     ROL e ROR 
    Ľ

        ROL:
           Ŀ
                                                   
               Ŀ     Ŀ    
           ĴCarry<ĳ                  <
                     
                           msb                lsb


        ROR:
            Ŀ
                                                  
               Ŀ      Ŀ  
            >                  >Carry
                      
               msb                lsb

    ROR  e  ROL  rotacionam  o  dado  "passando  pelo  carry".  Isto
significa que o bit  menos  significativo  (no  caso  de  ROR)  ser
colocado  no  flag  de carry e que o contedo antigo deste flag ser
colocado no bit mais significativo do dado.


    ķ
     RCL e RCR 
    Ľ

        RCL:
                          Ŀ
                                                   
                Ŀ    Ŀ    
                Carry<ĳ                  <
                     
                           msb                lsb


        RCR:
            Ŀ
                                     
               Ŀ     Ŀ
            >                  >Carry
                      
               msb                lsb

    Neste caso o dado    rotacionado  corretamente, ficando o carry
com uma cpia do bit mais  extremo,  de  acordo  com  o  sentido  de
rotao.

    Sinceramente nunca pode pensar em uma aplicao prtica para ROR
e  ROL.   Mas  as  instrues  esto disponveis para as mentes mais
previlegiadas que a minha! :)

    A sintaxe dessas instrues  a seguinte:

 Ŀ
   SHL AX,1                                                       
   SHR BL,1                                                       
   RCL DX,CL                                                      
   ROL ES:[DI],CL                                                 
 

    Note que o segundo operando   um contador do nmero de rotaes
ou shifts sero efetuadas.  Nos microprocessadores 80286  em  diante
pode-se usar um valor diferente de 1, no 8088/8086 no pode!

    Repare  tambm  que  podemos  usar  APENAS o registrador CL como
operando da direita se quisermos usar algum registrador!
                                                                                                                  
