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

  1. Instruções aritméticas
  2. Instrução ADD
  3. Instrução ADC
  4. Instrução SUB
  5. Instrução SBB
  6. Instrução DAD

As instruções aritméticas são utilizadas para realizar as operações de adição ou subtração de registradores e valores em memória via Acumulador. As flags Z, S, P, CY, Cy são afetadas por essas instruções.

Notação utilizada
#$NN Valor hexadecimal imediato
; Comentário
! Complemento
P Registradores BC(B) , DE(D) , HL(H) e SP
R Registradores A, B, C, D, E , H e L
M Endereço 16-bits contido em HL
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 ADD realiza a operação aritmética de adição entre registradores, valor imediato ou um valor contido em um endereço de memória. Para valores imediatos ou em memória, apenas o registrador Acumulador pode ser utilizado.

Operação
R1 <- R1 + R2
A <- A + (M)
A <- A + #$NN
Endereçamento
Registrador ADD R1, R2
Indireto ADD M
Imediato ADI $$NN
F(Flags)
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
MVI A $#01
MVI B, #$01
ADD A,B ;A = 2

A instrução ADC é semelhante a ADD, porém a ADC utiliza o flag Carry(Cy) também como operando ao realiza a adição. Para valores imediatos ou em memória, apenas o registrador Acumulador pode ser utilizado.

Operação
R1 <- R1 + R2 + Cy
A <- A + (M) + Cy; 
A <- A + #$NN + Cy
Endereçamento
Registrador ADC R1, R2
Indireto ADC M
Imediato ACI $$NN
F(Flags)
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
SEC ; Carry <- 1
MVI A $#01
MVI B, #$01
ADD A,B ;A = 3

A instrução SUB realiza a operação aritmética de subtração entre registradores, valor imediato ou um valor contido em um endereço de memória. Para valores imediatos ou em memória, apenas o registrador Acumulador pode ser utilizado.

Operação
R1 <- R1 - R2
A <- A - (M) ; M(HL)
A <- A - #$NN
Endereçamento
Registrador SUB R1,R2
Indireto SUB M
Imediato SBI $$NN
F(Flags)
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
MVI A $#01
MVI B, #$01
SUB A,B ; A = 0

A instrução SBB é semelhante a SUB, porém a SBB utiliza o flag Carry como "vem-um" como operando ao realiza a subtração. Para valores imediatos e em memória, apenas o registrador Acumulador pode ser utilizado.

Operação
R1 <- R1 - R2 - Cy
A <- A - (M) - Cy
A <- A - #$NN - Cy
Endereçamento
Registrador SBB R2, R1
Indireto SBB M
Imediato SUI $#NN
F(Flags)
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
SEC ; Carry <- 1
MVI A $#01
MVI B, #$01
SBB A,B

A instrução DAD realiza a operação aritmética de adição do registrador HL com os pares de registradores H, B, D, e o registrador SP. Apenas a flag Carry(Cy) é alterada por essa instrução.

Operação
HL <- HL + P
Endereçamento
Registrador DAD P
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:a
Ex:
LXI B, $#0001
LXI H, #$0001
DAD B ; HL = 0002
  1. 13/12/2024 - revisão 5 - Correção em 'operação' SUB e SBB
  2. 05/12/2024 - revisão 4 - Correção em intro; ajustes pontuais
  3. 09/09/2024 - revisão 3 - Correção em erros gramaticais, adição de flags afetadas
  4. 30/08/2024 - revisão 2 - Correção em links de objetivos
  5. 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
  6. 08/08/2023 - versão inicial