Objetivos
Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.
Instruções de Rotação e deslocamento
As instruções de rotação são utilizadas para rotacionar todos bits de um operando à direita ou à esquerda,
por meio ou não da flag Carry(Cy).
As instruções de deslocamento, movimentam todos os bits de um operando à direita ou à esquerda. A flag
Carry é alterada nesse tipo de instrução.
Mais informações sobre os registradores e flags podem ser vistas
em Registradores e Flags.
Notação utilizada:
|
|
REG |
Registrador de uso geral |
MEM |
Endereço de memória |
IME |
Valor imediato |
; |
Comentário |
>>, << |
Deslocamento à direita e esquerda |
<- |
Atribuição |
O, Cy |
Flags Overflow e Carry |
Flags |
|
a |
Alterada de acordo com resultado |
- |
Não sofre alteração |
0 |
Sempre zero |
1 |
Sempre um |
RLC - Rotate Left Through Carry
Com a instrução RLC, podemos rotacionar o operando1 em 1 ou mais bits à esquerda baseado no
operando2. O bit mais significativo, Bit 7, é armazenado na Carry que tem seu valor antigo armazenado
no Bit 0.
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
1*** |
0* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
0* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
1*** |
Operação
Cy anterior <- Cy
Cy <- operando1(Bit7)
operando1 << operando2
operando1(Bit0) <- Cy anterior
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 040h ; AL = 01000000b
RCL AL, 1 ; AL = 10000000b, Cy <- 0
RRC - Rotate Right Through Carry
Fazendo uso da instrução RRC podemos rotacionar o operando1 em 1 ou mais bits à direita em 1
ou mai bits baseado no operando2. O bit menos significativo, bit 0, é armazenado na Carry que tem
seu valor antigo armazenado no Bit 7.
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
0** |
1*** |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1*** |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
0** |
Operação
lead">Cy anterior <- Cy
Cy <- operando1(bit 0)
operando1 >> operando2
operando1(bit 7) <- Cy anterior
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 080h ; AL = 10000000b
RRC AL, 1 ; AL = 01000000b, Cy <- 0
Usando a instrução ROL podemos rotacionar o operando1 em 1 ou mais bits à esquerda.
O bit mais significativo, bit 7, é armazenado na Carry e também no bit menos significativo, bit 0.
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
- |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
1* |
Operação
Cy, temp <- operando1(Bit7)
operando1 << operando2
operando1(bit 0) <- temp
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 080h ; AL = 10000000b
ROL AL, 1 ; AL = 00000001b, Cy <- 1
Ao usar a instrução ROR podemos rotacionar o operando1 em 1 ou mais bits à direita.
O bit menos significativo, bit 0, é armazenado na Carry e também no bit mais significativo, bit 7.
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
- |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1** |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
Operação
Cy, temp <- operando1(bit 0)
operando1 >> operando2
operando1(bit 7) <- temp
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 01h ; AL = 00000001b
ROR AL, 1 ; AL = 10000000b, Cy <- 1
SAL - Shift Arithmetic Left
Quando usamos a instrução SAL podemos deslocar aritmeticamente o operando1 em 1 ou mais bits à
esquerda baseado no operando2. O bit mais significativo, bit 7, é armazenado na Carry e o bit menos
significativo, bit 0, recebe o valor 0.
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
- |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
0 |
Operação
Cy <- operando1(bit 0)
operando1 >> operando2
operando1(bit 7) <- operando1(bit 0)
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 80h ; AL = 10000000b
SAL AL, 1 ; AL = 00000000b, Cy <- 1
SAR - Shift Arithmetic Right
Com a instrução SAR podemos deslocar aritmeticamente o operando1 em 1 ou mais bits à direita
baseado no operando2. O bit menos significativo, bit 0, é armazenado na Carry e o bit mais
significativo, bit 7, recebe o seu valor anterior.
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
- |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1* |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
Operação
bit7_anterior <- operando1(bit 7)
Cy <- operando1(bit 0)
operando1 >> operando2
operando1(bit 7) <- bit7_anterior
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 80h ; AL = 10000000b
ROL AL, 1 ; AL = 11000000b, Cy <- 0
Fazendo uso da instrução SHL, podemos deslocar o operando1 em 1 ou mais bits à esquerda baseado no operando2.
O bit mais significativo, bit 7, é armazenado na Carry e o bit menos significativo, bit 0, recebe o
valor 0.
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
- |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
0 |
Operação
Cy <- operando1(bit 7)
operando1 << operando2
operando1(bit 0) <- 0
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, C0h ; AL = 11000000b
SHL AL, 1 ; AL = 10000000b, Cy <- 1
Ao usar a instrução SHR podemos deslocar o operando1 em 1 ou mais bits à direita baseado no operando2.
O bit menos significativo, bit 0, é armazenado na Carry e o bit mais significativo, bit 7, recebe o
valor 0.
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
- |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
0 |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
Operação
Cy <- operando1(bit 7)
operando1 >> operando2
operando1(bit 0) <- 0
Operandos
MEM, IME
REG, IME
MEM, CL
REG, CL
Flags
O: a
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
CLC
MOV AL, 02h ; AL = 00000011b
SHR AL, 1 ; AL = 00000001b, Cy <- 1
Histórico de atualizações
- 18/02/2025 - revisão 1 - adição de exemplos ilustrativos; remoção de texto sobre flag overflow
- 10/12/2024 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.