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

  1. Instruções aritméticas
  2. ADC
  3. SBC
  4. Aritmética decimal/Binária e flag D
  5. Exemplos ilustrativos

As instruções aritméticas são utilizadas para realizar a adição/subtração de valores de memória e o registrador Acumulador. As flags N,V,Z e C são afetadas por essas instruções.

A flag D deve ser previamente configurada de acordo com o tipo do adição é desejada: binária(0) ou bcd(1).

Notação utilizada
#$NN Valor hexadecimal imediato
#$NNNN; Endereço hexadecimal imediato
$NNNN Endereço hexadecimal
$NN ou h Valor hexadecimal
MNEMÔNICO Abreviação do nome de uma instrução
; Comentário
() Conteúdo de memória
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.

A instrução ADC adiciona um valor, de memória ou imediato ao registrador Acumulador utilizando a flag Carry como terceiro operando. Essa flag que deve ser previamente setada ou resetada de acordo com a necessidade.

Operação
A <- A + (M) + Carry
ou
A <- A + #$NN + Carry
Endereçamento
Imediato ADC #$NN
Página Zero ADC $NN
Página Zero,X ADC $NN,X
Absoluto ADC $NNNN
Absoluto,X ADC $NNNN,X
Absoluto,Y ADC $NNNN,Y
Indireto X ADC ($NN,X)
Indireto Y ADC ($NN),Y
PS - Flags afetadas
N: A[bit 7]
V: mundaça de sinal ? 1 : 0
B: - 
D: -
D: - 
Z: A == 0 ? 1 : 0
C: houve carry ? 1 : 0
Ex:
CLD ; modo binário
SEC ; Carry <- 1
LDA #$01
ADC #$01

Essa instrução subtrai um valor de memória ou imediato ao registrador Acumulador utilizando e a flag Carry como terceiro operando que funciona como "Vem-um"/Borrow(Empréstimo). Essa flag deve ser previamente setada ou resetada de acordo com a necessidade.

Na subtração, a flag Carry tem o comportamento inverso ao da adição: Quando há empréstimo, a Carry recebe 0, Quando não há empréstimo, Carry recebe 1.

Operação
A <- A - (M) - (1 - Carry)
ou
A <- A - #$NN - (1 - Carry)
Endereçamento:
Imediato SBC #$NN
Página Zero SBC $NN
Página Zero,X SBC $NN,X
Absoluto SBC $NNNN
Absoluto,X SBC $NNNN,X
Absoluto,Y SBC $NNNN,Y
Indireto X SBC ($NN,X)
Indireto Y SBC ($NN),Y
PS - Flags afetadas
N: A[bit 7]
V: mundaça de sinal ? 1 : 0
B: - 
D: -
D: - 
Z: A == 0 ? 1 : 0
C: houve empréstimo ? 0 : 1
Ex:
CLC ; Carry <- 0, Vem-um
LDA #$02
SBC #$01 ; 2 - 1 - 1 = 0
  1. 11/05/2026 - revisão 4 - Ajustes: objetivos, intro, sintaxes e descrições; Adição: como setar flags
  2. 12/03/2025 - revisão 3 - Correções pontuais; Adição de info. sobre carry na subtração
  3. 11/09/2024 - revisão 2 - correção em introdução e adiçao de flags afetadas
  4. 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
  5. 28/04/2023 - versão inicial