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 registrador à direita ou à esquerda. A flag é alterada por esse tipo de instrução.

As instruções de deslocamento, movimentam todos os bits de um registrador à direita ou à esquerda. A flags Carry também é alterada por esse tipo de instrução.

Tanto as instruções de deslocamento quanto rotação são utilizadas como parte do modo de endereçamento Scaled visto em Modos de Endereçamento

As instruções de deslocamento para direita ou esquerda podem ser utilizadas para realizar operações de multiplicação ou divisão em potência de 2.

As instruções são executadas de acordo com a condição <cond> utilizada. As flags de status N, Z, C, e V são alteradas quando o sufixo S é utilizado em uma instrução.

Mais informações sobre registradores, flags e condições podem ser vistas em Registradores e CPSR e Formato: Condições.

Notação utilizada:
Rd Registrador de destino
Rn, Rm, Rs Registrador operando
MEM Endereço de memória
; Comentário
>>, << Deslocamento à direita e esquerda
<>>, <<> Rotação à direita e esquerda
<- Atribuição
N, Z, C, V Flags
Flags
a Alterada de acordo com resultado
- Não sofre alteração

Ao usar a instrução ROR podemos rotacionar todos os bits de um valor contido em um registrados à direita em até 31 posições. Essa instrução não utiliza a flag Carry como parte da rotação, mas Carry recebe o bit menos significativo.

Sintaxe
MNEMÔNICO{<cond>}{S} Rd, Rm, ROR #imediato_5bits
MNEMÔNICO{<cond>}{S} Rd, Rm, ROR Rs
Operação
temp <- Rm[Bit 0]
Rm >> #imediato_5bits
Rm[31] <- temp
Endereçamento:
Rm, ROR #imediato
Rm, ROR Rs
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #1
MOV R0, R1, ROR #1
;R0 = 80000000h

Fazendo uso da instrução RRX podemos rotacionar o valor de um registrador à direita em 1 bit. A flag Carry é utilizada como parte dos bits rotacionados.

Sintaxe
MNEMÔNICO{<cond>}{S} Rd, Rm, RRX
Operação
C_anterior <- Cy
Cy <- Rm[bit 0]
Rm >> 1
Rm[Bit 31] <- C_anterior
Endereçamento:
Rm, RRX
CPSR
N: a
Z: a 
C: a
V: -
Ex:

;C = 1
MOV R1, #2
MOV R0, R1, RRX #1
;R0 = 80000001h
;C = 0

Fazendo uso da instrução LSL, podemos deslocar os bits de um registrador, em até 31 posições, baseado em um terceiro operando que contém a quantidade de bits para deslocar. O bit menos significativo recebe o valor 0 e o bit mais significativo é transferido para a flag Carry.

Sintaxe
MNEMÔNICO{<cond>}{S} Rd, Rm, LSL #imediato_5bits
MNEMÔNICO{<cond>}{S} Rd, Rm, LSL Rs
Operação
C <- Rm[Bit 31]
Rm << #imediato_5bits ou Rs
Rm[Bit 0] <- 0
Endereçamento:
Rm, LSL #imediato
Rm, LSL Rs
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #1
MOV R0, R1, LSL #1
;R0 = 2 ;C = 0
MOV R2, R0, LSL R1
;R0 = 2 ;C = 0

Ao usar a instrução LSR os bits de um registrador será deslocado à direita em até 31 posições baseado em um terceiro operando que contém a quantidade de bits para deslocar. O bit mais significativo recebem o valor 0 e o bit meno significativo é transferido para a flag Carry.

Sintaxe
MNEMÔNICO{<cond>}{S} Rd, Rm, LSR #imediato_5bits
MNEMÔNICO{<cond>}{S} Rd, Rm, LSR Rs
Operação
C <- Rm[Bit 0]
Rm >> #imediato_5bits ou Rs
Rm[Bit 31] <- 0
Endereçamento:
#<imediato>
Rm, LSL #<deslocamento_imediato>
Rm, LSL Rs
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #5
MOV R0, R1, LRL #1
;R0 = 4 ;C = 1

A instrução ASR é semelhante ao instrução LSR. Porém, a instrução ASR trabalha com valores sinalizados. O bit mais significativo é mantido quando o deslocamento é feito, preservando assim o sinal do valor contido no registrador.

Sintaxe
MNEMÔNICO{<cond>}{S} Rd, Rm, ASR #imediato_5bits
MNEMÔNICO{<cond>}{S} Rd, Rm, ASR Rs
Operação
C <- Rm[Bit 0]
Rm >> #imediato_5bits
Rm[Bit 31] <- Rm[Bit 31]
Endereçamento:

Rm, ASR #<deslocamento_imediato>
Rm, ASR Rs
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #FFFFFFFD ; -4
MOV R0, R1, ASR #1
;R0 = FFFFFFFE (-2) ; C = 0

MOV R1, #80000000 ; -2.147.483.648
MOV R0, R1, ASR #1
;R0 = C0000000 (-1.073.741.824) ; C = 0
  1. 06/02/2025 - versão inicial