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

  1. Instruções de bit-a-bit
  2. Instrução AND
  3. Instrução ORA
  4. Instrução EOR
  5. Instrução BIT

Com as instruções bit-a-bit/bitwise ou lógicas, podemos realizar as operações E, OU Não e OU exclusivo bit-a-bit, entre o acumulador e um valor de memória. Apenas as flags N e Z são afetadas por estas instruções, com exceção da instrução BIT.

Notação utilizada:
#$NN Valor hexadecimal imediato
#$NNNN; Endereço hexadecimal imediato
$NNNN Endereço hexadecimal
$NN ou h Valor hexadecimal
; Comentário
N,Z,V Flags
Acc. Acumulador
| Concatenação
<- 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
0 Sempre zero
1 Sempre um

Mais informações sobre os registradores e flags podem ser vistas em Registradores.

Com a instrução AND aplicamos a operação E bit-a-bit entre o registrador Acumulador e um valor contido em um endereço de memória ou imediato. As flags N e C são atualizadas de acordo com o resultado.

Operação
A <- A & M
F(Flags)
N: a
V: -
B: - 
D: -
Z: a
C:-
Endereçamento:
Imediato AND #$NN
Página Zero AND $NN
Página Zero,X AND $NN,X
Absoluto AND $NNNN
Absoluto,X AND $NNNN,X
Absoluto,Y AND $NNNN,Y
Indireto X AND ($NN,X)
Indireto Y AND ($NN),Y
Tab. 1: Registrador A - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.2: Valor - 0xAA
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 1 0 1 0 1 0
Tab. 3: Resultado - 0x88
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 0 0 1 0 0 0
Ex:
LDA #$00
AND #$0F

Com a instrução ORA aplicamos a operação OU bit-a-bit entre o registrador Acumulador e um valor contido em um endereço de memória ou imediato. As flags N e C são atualizadas de acordo com o resultado.

Operação
A <- A | M
F(Flags)
N: a
V: -
B: - 
D: -
Z: a
C:-
Endereçamento:
Imediato ORA #$NN
Página Zero ORA $NN
Página Zero,X ORA $NN,X
Absoluto ORA $NNNN
Absoluto,X ORA $NNNN,X
Absoluto,Y ORA $NNNN,Y
Indireto X ORA ($NN,X)
Indireto Y ORA ($NN),Y
Tab. 4: Registrador A - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.5: Valor - 0xAA
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 1 0 1 0 1 0
Tab. 6: Resultado - 0xEE
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 1 0 1 1 1 0
Ex:
LDA #$01
ORA $00

Com a instrução EOR aplicamos a operação Ou Exclusivo bit-a-bit entre o registrador Acumulador e um valor contido em um endereço de memória. As flags N e C são atualizadas de acordo com o resultado.

Operação
A <- A ^ M
F(Flags)
N: a 
V: -
B: - 
D: -
Z: a
C:-
Endereçamento:
Imediato EOR #$NN
Página Zero EOR $NN
Página Zero,X EOR $NN,X
Absoluto EOR $NNNN
Absoluto,X EOR $NNNN,X
Absoluto,Y EOR $NNNN,Y
Indireto X EOR ($NN,X)
Indireto Y EOR ($NN),Y
Tab. 7: Registrador A - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.8: Valor - 0xAA
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 1 0 1 0 1 0
Tab. 9: Resultado - 0x66
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 1 1 0 0 1 1 0
Ex:
LDA #$00
EOR #$FF ; Inverte os bit de A

Com a instrução BIT podemos testar os bits de um valor em memória. Uma operação AND é realizar com o Acumulador e o resultado é descartado e usado apenas para atualizar a flag Z, N e V.

A flag Z é atribuída de acordo com o resultado do AND. Os bits 7 e 6 do valor contido na memória são transferidos para as flags N e V respectivamente.

Operação
N <- M(Bit 7)
V <- M(Bit 6)
Z <- A & M
F(Flags)
N: bit 7 de M 
V: bit 6 de M
B: - 
D: -
Z: a
C:-
Endereçamento
Página Zero BIT $NN
Absoluto BIT $NNNN
Ex:
;RAM[0000] = 0xFF
LDA #$80
BIT $00
BIT $0200
  1. 12/03/2025 - revisão 3 - correção de nome de instrução EOR de tópico OR; Ajustes pontuais
  2. 11/09/2024 - revisão 2 - adição de tabelas com exemplos e flags afetadas
  3. 30/08/2024 - revisão 1 - Correção em links de objetivos
  4. 28/04/2023 - versão inicial