Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

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

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

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

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

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
  1. 18/02/2025 - revisão 1 - adição de exemplos ilustrativos; remoção de texto sobre flag overflow
  2. 10/12/2024 - versão inicial