SHL (Shift Left = desplazamiento
a la izquierda)
Se desplazan a la izquierda los bits del operando destino tantas
posiciones como indique el operando fuente. El desplazamiento de una posición
se realiza de la siguiente forma: el bit de mayor peso del operando se desplaza
al bit CF del registro de estado, el resto de los bits se desplazan una
posición hacia la izquierda, y la posición de menor peso se rellena con un 0.
Este proceso se representa en la figura siguiente.
SAL (Shift Arithmetic Left = desplazamiento aritmético a la izquierda)
El objetivo de un desplazamiento aritmético a la izquierda es
multiplicar un operando, interpretado con signo, por una potencia de 2.
Para llevar a cabo este tipo de desplazamiento, hay que desplazar los
bits del operando hacia la izquierda introduciendo ceros por su derecha. En
realidad, este tipo de desplazamiento es idéntico al llevado a cabo por la
instrucción shl; por tanto, sal y shl son, de hecho, la misma instrucción y se
codifican con el mismo código máquina.
SHR (DESPLAZAMIENTO A LA DERECHA) SHR (Shift Right = desplazamiento a la derecha)
La instrucción shr funciona de la misma forma que shl, pero desplazando
los bits a la derecha en lugar de a la izquierda, tal y como se muestra en la
figura siguiente.
SAR (Shift Arithmetic Right = desplazamiento aritmético a la derecha)
Esta instrucción desplaza los bits del operando destino a la derecha
tantos bits como indique el operando fuente. Esta forma de funcionamiento es
similar a la de la instrucción shr; sin embargo, ambas instrucciones se
diferencian en que sar, en vez introducir ceros por la izquierda del operando,
replica el bit de mayor peso (bit de signo) en cada desplazamiento.
Esquemáticamente, la instrucción sar trabaja de la siguiente forma:
El desplazamiento a la derecha realizado por la instrucción sar recibe
el nombre de aritmético porque sirve para dividir un operando entre una
potencia entera de 2.
El desplazamiento aritmético a la derecha de un operando (considerado
con signo) n posiciones equivale a la división entera del operando entre 2n.
ROL
Al ejecutar una
instrucción ROL, el bit más significativo del dato es desplazado hacia la
bandera de acarreo y también hacia la posición del bit memos significativo, por
lo cual todos los bits restantes son rotados o movidos hacia la izquierda.
ROR
Funciona igual con la excepción de que este rota
los bits a la derecha.
RCL
En el caso de RCL, el bit más significativo pasa
hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo
pasa al bit menos significativo y finalmente los bits restantes son rotados
hacia la izquierda.
RCR
La instrucción RCR funciona igual, pero aplica su
rotación hacia la derecha.
Programa: Rota.ASM
Descripción: Este programa ilustra el uso de las instrucciones de rotación y desplazamiento.
.MODEL TINY
.DATA
dato1 dw 10 ; variable de tipo entero
.CODE
INICIO: ; Punto de entrada al programa
mov ax,1 ; AX=1
mov bx,10 ; BX=10
shl ax,1 ; ax=ax*2
mov cx,3 ; contador igual a 3
shl ax,cl ; ax=ax*8
shr bx,1 ; bx=bx/2
mov cx,2 ;
shr bx,cl ; bx=bx/4
shl dato1,1 ; dato1=dato1*2
mov ax,1 ; ax=1
rol ax,1 ; rotar ax 1 vez
mov bx,-10 ; bx=-10
sal bx,1 ; bx=bx*2
mov ax,4c00h ; Terminar
int 21h ; Salir al dos
END INICIO
END
.MODEL TINY
.DATA
dato1 dw 10 ; variable de tipo entero
.CODE
INICIO: ; Punto de entrada al programa
mov ax,1 ; AX=1
mov bx,10 ; BX=10
shl ax,1 ; ax=ax*2
mov cx,3 ; contador igual a 3
shl ax,cl ; ax=ax*8
shr bx,1 ; bx=bx/2
mov cx,2 ;
shr bx,cl ; bx=bx/4
shl dato1,1 ; dato1=dato1*2
mov ax,1 ; ax=1
rol ax,1 ; rotar ax 1 vez
mov bx,-10 ; bx=-10
sal bx,1 ; bx=bx*2
mov ax,4c00h ; Terminar
int 21h ; Salir al dos
END INICIO
END





No hay comentarios:
Publicar un comentario