Objetivos
Aritmética 16-bits
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:
- ss: par BC, DE, HL ou SP
- pp: par BC, DE, IX ou SP
- 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
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
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
SBC - Subtract With Carry
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
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:
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:
F(Flags)
S: -
Z: -
H: -
P/V: -
N: -
C: -
Exemplo:
LLD C,#$00
LD B,#$01
DEC BC
Histórico de atualizações
- 14/08/2026 - revisão 1 - Ajustes: sintaxe INC e DEC, intro e outros ajustes pontuais
- 04/08/2026 - versão inicial: ADD, ADC, SBC, INC e DEC
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.