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

  1. Instruções aritméticas
  2. Instrução ADC
  3. Instrução SBC
  4. Aritmética decimal 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.

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, que deve ser previamente setada ou resetada de acordo com a necessidade.

Operação
A <- A + M + Carry
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
V: a
B: - 
D: -
D: ?
Z: a
C: a
Ex:
SEC ; Carry <- 1
LDA #$01
ADC #$01

Essa instrução adiciona um valor de memória ou imediato ao registrador Acumulador utilizando e a flag Carry, como terceiro operando, que funciona como "Vem-um" ou Borrow(Empréstimo) e que 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, Carry deve receber 0. Quando não a empréstimo, Carry deve receber 1.

Operação
A <- A - M - (1 - Carry)
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
V: a
B: - 
D: -
D: ?
Z: a
C: a
Ex:
CLC ; Carry <- 0, Vem-um
LDA #$02
SBC #$01 ; 2 - 1 - 1 = 0
  1. 12/03/2025 - revisão 3 - Correções pontuais; Adição de info. sobre carry na subtração
  2. 11/09/2024 - revisão 2 - correção em introdução e adiçao de flags afetadas
  3. 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
  4. 28/04/2023 - versão inicial