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

  1. Instruções lógicas/bit-a-bit
  2. Instrução AND
  3. Instrução ORR
  4. Instrução EOR
  5. Instrução NOT

Com as instruções lógicas, podemos realizar as operações bit-a-bit/bitwise, E, OU e OU Exclusivo sobre os registradores de uso geral. As flags C, Z e N, são afetadas por essas instruções.

ARM também define um instrução para setar ou resetar um bit específico de um registrador. A operação NOT deve ser feita utilizando a instrução MNV.

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.

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
N, Z, C Flags
<- Atribuição
& E bit-a-bit
| OU bit-a-bit
^ Ou exclusivo bit-a-bit
Flags
a Alterada de acordo com resultado
- Não sofre alteração

Com a instrução AND aplicamos a operação E bit-a-bit entre dois registradores ou registrador e valor imediato. Essa instrução é utilizada pra resetar bits específicos utilizando um valor como máscara.

Tabela verdade:
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
Sintaxe
AND{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn & <endereçamento>
C <- Carry_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
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #FF
ANDS R0, R1, #0F 
BEQ label

Com a instrução ORR aplicamos a operação OU bit-a-bit entre dois registradores ou registrador e valor imediato. Essa instrução é utilizada pra setar bits específicos utilizando um valor como máscara.

Tabela verdade:
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
Sintaxe
ORR{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn | <endereçamento>
C <- Carry_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
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #0F
OR R0, R1, #F0 

Com a instrução EOR aplicamos a operação OU Exclusivo bit-a-bit entre dois registradores ou registrador e valor imediato. Essa instrução pode ser utilizada pra limpar registradores ou verificar se um valor é igual a zero.

Tabela verdade:
0 EOR 0 = 0
0 EOR 1 = 1
1 EOR 0 = 1
1 EOR 1 = 0
Sintaxe
EOR{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn ^ <endereçamento>
C <- Carry_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
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #0F
EOR R0, R1, #F0 

Com a instrução BIC podemos resetar bits de um registrador de uso geral. BIC aplica um operação NOT em um terceiro operando, que é usado como máscara, e depois aplica uma operação AND com o segundo operando.

Tabela verdade:
1 -> 0
Operação
Rd <- Rn & (~<endereçamento>)
C <- Carry_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
CPSR
N: a
Z: a 
C: a
V: -
Ex:
MOV R1, #0F ; 00001111b
BIC R0, R1, #2  ;00000010b
;R0 = 00001101b
  1. 06/02/2025 - versão inicial