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

  1. Aritmética 16-bits
  2. ADD
  3. ADC
  4. SBC
  5. INC
  6. DEC

As instruções aritméticas são responsáveis por realizar as operações de adição, subtração, incremento e decremento. O Z80 não possui instrução de subtração sem carry.

As instruções mencionadas acima podem ser feitas sobre dados 16-bits utilizando os registradores BC, DE, HL, IX e IY.

As flags de status contidas no registrador F são atualizadas de acordo com cada instrução deste grupo, exceto pelas instruções INC e DEC que não alteram as flags.

Notação utilizada:
  1. ss: par BC, DE, HL ou SP
  2. pp: par BC, DE, IX ou SP
  3. rr: par BC, DE, IY ou SP

Assim como na adição 8-bits, a instrução ADD executa a operação de adição. Porém, essa operação é realizada com dados 16-bits usando os pares de registradores BC, DE e HL, e os registradores de indexação IX e IY.

Operação:
par_destino <- par_destino + par_origem
Sintaxe
ADD
Operandos/ME: destino, origem
HL, ss
IX, pp
IY, rr
F(Flags)
S: -
Z: -
H: ?
P/V: -
N: 0
C: 1 se “vai-um” Bit 15; 0, caso contrário
Exemplo:
LD H,#$FF
LD L,#$00
LD D,#$02
LD E,#$00
ADD HL,DE
;HL = FF02

Semelhante à instrução ADD, ADC executa a operação de adição em dados de 16-bits. Porém, a flag Carry é utilizada como terceiro operando. Diferente de ADD, apenas o registrador par HL pode ser utilizado como destino.

Operação:
HL<- HL + par + Carry
Sintaxe
ADC
Operandos/ME: destino, origem
HH, ss
F(Flags)
S: Bit 15 de HL
Z: 1 se HL == 0; 0 caso contrário
H: ?
P/V: 1 se overflow; 0 caso contrário
N: 0
C: 1 se “vai-um” Bit 15; 0 caso contrário
Exemplo:
LD H,#$FF
LD L,#$FF
LD D,#$02
LD E,#$00
SCF
ADC HL,DE
; HL = FF03

Assim como na SUB, SBC executa a operação de subtração em dados de 16-bits. A flag Carry é utilizada como terceiro operando. Semelhante a ADD, apenas o par HL pode ser utilizado como destino.

Operação:
HL <- HL - ss - Carry
Sintaxe
SBC
Operandos/ME: destino, origem
HL, ss
F(Flags)
S: - Bit 15 de HL
Z: 1 se HL == 0; 0, caso contrário
H: ?
P/V: 1 se overflow; 0, caso contrário
N: 1
C: 1 se “vai-um” Bit 15; 0, caso contrário
Exemplo:
LD H,#$FF
LD L,#$FF
LD D,#$02
LD E,#$00
SCF
SBC HL,DE

A instrução INC incrementa em uma unidade o valor contido em um dos pares de registradores. As flags de status contidas no registrador F não são alteradas por essa instrução.

Operação:
par <- par + 1
Sintaxe
INC
Operandos/ME:
ss
IX
IY
F(Flags)
S: -
Z: -
H: -
P/V: -
N: -
C: -
Exemplo:
LD A, #$00
INC A
;A = 1

A instrução DEC decrementa em uma unidade o valor contido em um dos pares de registradores. As flags de status contidas no registrador F não são alteradas por essa instrução.

Operação:
par <- par - 1
Sintaxe
DEC
Operandos/ME:
pp
IX
IY
F(Flags)
S: -
Z: -
H: -
P/V: -
N: -
C: -
Exemplo:
LLD C,#$00
LD B,#$01
DEC BC
  1. 14/08/2026 - revisão 1 - Ajustes: sintaxe INC e DEC, intro e outros ajustes pontuais
  2. 04/08/2026 - versão inicial: ADD, ADC, SBC, INC e DEC