As instruções de rotação são responsáveis por rotacionar os bits de um registrador de dados ou valor em memória para direita ou esquerda, em uma ou mais posições, com auxílio das flags Carry(C) e Extend(X) e suporta quase todos os modos de endereçamento.

Abaixo, a notação utilizada ao longo dos tópicos abordados nesta parte do tutorial:

Tab. 1: Notação utilizada
Símbolo Descrição
-> Atribuição
<<> Rotação a esquerda
<>> Rotação à direita
CCR
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero

Para informações sobre registradores, visite Registradores e para mais informações sobre modos de endereçamento visite Modos de Endereçamento.

A instrução ROL rotaciona todos bits em uma ou mais posição à esquerda de um registrador ou valor em memória. Os bits mais significativos são copiado para a flags Carry(C) e os espaços à direita são preenchidos com os bits mais significativos anteriores no destino.

3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.10: Flags X/C e valor 8-bits
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
- - 1* 0 0 0 0 0 0 1**
Tab.11: valor 8-bits rotacionado 1 bit à esquerda
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
- 1* 0 0 0 0 0 0 1** 1*
Operação
destino <- destino <<> numero_bits
Endereçamento Origem
-
Endereçamento Destino
Dx, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: a
Z: a 
V: 0
C: a, a - Bit mais significativo se numero_bits maior que 0, inalterada caso contrário.
Sintaxe
ROL Dx,Dy
ROL #imediato,Dx
ROL absoluto.W
ROL absoluto.L
Ex
ROL.W #$02,D0
ROL.L D1,D3
ROL.W $FFFFFF00

A instrução ROR desloca todos bits, em uma ou mais posições, à direita de um registrador de dados ou valor Word em memória. Os bits menos significativos são copiado para as flags Carry(C) e Extend(X) e os espaços à esquerda são preenchidos com bits menos significativos anteriores no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.2: Flags X/C e valor 8-bits
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1** 0 0 0 0 0 0 1* 0 -
Tab.3: valor 8-bits rotacionado 1 bit à direita
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1* 1** 0 0 0 0 0 0 1* -
Operação
destino <- destino <>> numero_bits
Endereçamento Origem
-
Endereçamento Destino
Dx, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: a
Z: a 
V: 0
C: a, 0 se bits rotacionados igual a 0
Sintaxe
ROR Dx,Dy
ROR #imediato,Dx
ROR absoluto.W
ROR absoluto.L
Ex
ROR.W #$02,D0
ROR.L D1,D3
ROR.W $FFFFFF00

A instrução ROXL rotaciona todos bits, em uma ou mais posição à esquerda, de um registrador de dados ou valor em memória. Os bits mais significativos são copiado para a flags Carry(C) e Extend(X) e os espaços à direita são preenchidos com os bits Extend(X) no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.10: Flags X/C e valor 8-bits
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
- - 1* 0 0 0 0 0 0 1**
Tab.11: valor 8-bits rotacionado 1 bit à esquerda
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1* 1* 0 0 0 0 0 0 1** 1*
Operação
destino <- destino <<> numero_bits
Endereçamento Origem
-
Endereçamento Destino
Dx, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L
Tamanho do dado
Byte, Word e Longword
CCR
X: a - Bit mais significativo se numero_bits maior que 0, inalterada caso contrário.
N: a
Z: a 
V: 0
C: X
Sintaxe
ROXL Dx,Dy
ROXL #imediato,Dx
ROXL absoluto.W
ROXL absoluto.L
Ex
ROXL.W #$02,D0
ROXL.L D1,D3
ROXL.W $FFFFFF00

A instrução ROXR desloca todos bits, em uma ou mais posições, à direita de um registrador de dados ou valor Word em memória. Os bits menos significativos são copiado para as flags Carry(C) e Extend(X) e os espaços à esquerda são preenchidos com Extend(X) no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.2: Flags X/C e valor 8-bits
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1** 0 0 0 0 0 0 1* - -
Tab.3: valor 8-bits rotacionado 1 bit à direita
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1* 1** 0 0 0 0 0 0 1* 1*
Operação
destino <- destino <>> numero_bits
Endereçamento Origem
-
Endereçamento Destino
Dx, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L
Tamanho do dado
Byte, Word e Longword
CCR
X: - Bit mais significativo se numero_bits maior que 0, inalterada caso contrário.
N: a
Z: a 
V: 0
C: X
Sintaxe
ROXR Dx,Dy
ROXR #imediato,Dx
ROXR absoluto.W
ROXR absoluto.L
Ex
ROXR.W #$02,D0
ROXR.L D1,D3
ROXR.W $FFFFFF00
  1. 05/09/2024 - Correção em erros gramaticais
  2. 04/04/2024 - versão inicial