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

Com as instruções de movimentação podemos movimentar dados entre os registradores R0-R15. As instruções de permuta(Swap), utilizadas como semáforos, trocam valores entre registrador e memória. Já as instruções de Flags(CPSR), movimentam valores de bits de status, controles e outras entre registradores e o registrador CPSR(SPSR).

Quando uma instrução, indepedente do grupo, utiliza dois operando ou argumentos, a leitura da operação pode ser feita como abaixo.

Sintaxe
MNEMÔNICO{&cond>}{S} destino, origem

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, exceto as instruções que manipulam o CPSR.

Sintaxe
MNEMÔNICO{<cond>}{S} destino, origem

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

Notação utilizada
opcode/Mnemônico instrução
<- Atribuição
<-> Troca de valores
Rd Registrador de destino
Rn, Rm, Rs Registrador operando
[] Conteúdo/Conteúdo de memória
MEM Memória
cond Condição

A instrução MOV é utilizada para mover valores entre os registradores R0-R15 e também valores imediatos para registradores. O uso com registradores específicos deve ser feito com precaução para evitar erros.

Sintaxe
MOV{<cond>}{S} Rd, <endereçamento>
Operação
Rd <- <endereçamento>
Endereçamento:
#<imediato>
Rm
Rm, LSL #<deslocamento_imediato>
Rm, LSL Rs
Rm, LSR #<deslocamento_imediato>
Rm, LSR Rs
Rm, ASR #<deslocamento_imediato>
Rm, ASR Rs
Rm, ROR #<deslocamento_imediato>
Rm, ROR Rs
Rm, RRX
Exemplo:
MOV R0, #0
MOV R0, R1 
MOV R2, R0 LSL #2

Com a instrução MOVN, podemos mover um valor na forma de complemento de um(NOT), máscara ou negado, para um registrador de uso geral.

Sintaxe
MVN{<cond>}{S} Rd, <endereçamento>
Operação
Rd <- NOT <endereçamento>
Endereçamento:
#<imediato>
Rm
Rm, LSL #<shift_ime>
Rm, LSL Rs
Rm, LSR #&lshift_ime>
Rm, LSR Rs
Rm, ASR #<shift_ime>
Rm, ASR Rs
Rm, ROR #<shift_ime>
Rm, ROR Rs
Rm, RRX
Exemplo:
MOV R0, #FF00
MOV R0, R1 
MOV R2, R0 LSL #2

Usando a instrução SWP, podemos fazer um permuta, ou troca, de valores 32-bits entre memória e registrador de uso geral.

Sintaxe
SWP{<cond>} Rd, Rm, [Rn]
Operação
Rd != Rm
temp <- MEM[Rn]
MEM[Rn] <- Rm
Rd <- temp

Rd == Rm
MEM[Rn] <-> Rm
Endereçamento:
Rm,[Rn]
Exemplo:
SWP R0, R1, [R2]

A instrução SWPB é semelhante ao instrução SWP. Porém, a SWPB trabalha apenas valores 8-bits que são permutados pela instrução. O byte salvo no registrador de destino é estendido para 32-bits setando zero nos bits mais significativos.

Sintaxe
SWP{<cond>}B Rd, Rm, [Rn]
Operação
Rd != Rm
temp <- (byte)MEM[Rn]
temp estendido para 32-bits
MEM[Rn] <- Rm
Rd <- temp

Rd == Rm
MEM[Rn] <-> Rm
Rm estendido para 32-bits
Exemplo:
SWPB R0, R1, [R2]

Com a instrução MRS podemos mover o conteúdo do registrador CPSR, ou SPSR, para um registrador de uso geral.

Sintaxe
MRS{<cond>} Rd, CPSR
MRS{<cond>} Rd, SPSR
Operação
Rd <- CSPR
Rd <- CSPR
Exemplo:
MRS R0

Usando a instrução MSR podemos mover o conteúdo do registrador de uso geral para o registrador CPSR ou SPSR. Os bits do CPSR ou SPSR são atualizados ou modificados de acordo com o bits dos campos na instrução.

Sintaxe Imediato: (v3, v4)
MSR{<cond>} CPSR_f, #imediato 32-bits
MSR{<cond>} SPSR_f, #imediato 32-bits
Operação
CPSR[31:24] = #imediato[31:24]
SPSR[31:24] = #imediato[31:24]
Sintaxe Registrador: (v3, v4)
MSR{<cond>} CPSR_<campo>,Rm
MSR{<cond>} SPSR_<campo>, Rm
campos
_c: controle 
_x: extensão
_s: status
_f: condição
Operação
_c: CPSR[7:0] = Rm[7:0]
_x:CPSR[15:8] = Rm[15:8]
_s:CPSR[23:16] = Rm[23:16]
_f:CPSR[31:24] = Rm[31:24]
Exemplo:
MSR CPSR_f, #F0000000
MOV R0, #F0000000
MSR CPSR_f, R0
  1. 05/02/2024 - versão inicial