Objetivos
As instruções aritméticas são utilizadas para realizar as operações de adição ou subtração
de registradores ou valor 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 ou
valor um endereço de memória com o acumulador.
Operação
A <- A + R
ou
A <- A + M
Endereçamento
| Registrador |
ADD R1, R2 |
| Indireto |
ADD M |
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac: Carry bit 4
P: #num bits 1 de A == par ? 1 : 0
Cy:Carry bit 7
Ex:
MVI A $#01
MVI B, #$01
ADD A,B ;A = 2
A ADI é semelhante à ADD, porém utiliza um valor imediato como operando que
é adicionado ao acumulador.
Operação
A <- A + #$NN
Endereçamento
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac: Carry bit 4
P: #num bits 1 de A == par ? 1 : 0
Cy:Carry bit 7
Ex:
MVI A #$01
MVI B, #$01
ADI #$01
A instrução ADC é semelhante à ADD, porém a ADC utiliza o
flag Carry(Cy)também como terceiro operando ao realiza a operação.
Operação
A <- A + R + 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[bit 7]
Z: A == 0 ? 1 : 0
Ac: Carry bit 4
P: #num bits 1 de A == par ? 1 : 0
Cy:Carry bit 7
Ex:
SEC ; Carry <- 1
MVI A $#01
MVI B, #$01
ADD A,B ;A = 3
ACI - Adição Imediata com Carry
A instrução ACI é semelhante a ADC, porém a ADI, porém utiliza a ACI um
valor imediato como segundo operando da operação.
Operação
A <- A + #$NN + Cy
Endereçamento
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac: Carry bit 4
P: #num bits 1 de A == par ? 1 : 0
Cy:Carry bit 7
Ex:
SEC ; Carry <- 1
MVI A $#01
MVI B, #$01
ADI #$01
SUB - Subtração sem Borrow
A instrução SUB realiza a operação aritmética de subtração entre registradores ou valor
em memória e o registrador acumulador.
Operação
A <- A - R
A <- A - M ; M(HL)
Endereçamento
| Registrador |
SUB R1,R2 |
| Indireto |
SUB M |
| Imediato |
SBI $$NN |
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac:Borrow bit 4
P: #num bits 1 de A == par ? 1 : 0
Cy:Borrow bit 7
Ex:
MVI A $#01
MVI B, #$01
SUB A,B ; A = 0
SUI - Subtração Imediata sem Borrow
A instrução SUI é semelhante à instrução SUB, porém utiliza um valor imediato
como segundo operando da operação.
Operação
A <- A - #$NN ; M(HL)
Endereçamento
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac: Borrow bit 4
P: #num bits 1 de A == par ? 1 : 0
Cy:Borrow bit 7
Ex:
MVI A $#01
MVI B, #$01
SUI #$01
SBB - Subtração com Borrow
A instrução SBB é semelhante a SUB, porém a SBB utiliza o
flag Carry como terceiro operando da subtração.
Operação
A <- A - R - Cy
A <- A - (M) - Cy
Endereçamento
| Registrador |
SBB R2, R1 |
| Indireto |
SBB M |
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac: Borrow bit 4
P: #num bits 1 == par ? 1 : 0
Cy:Borrow bit 7
Ex:
SEC ; Carry <- 1
MVI A $#01
MVI B, #$01
SBB A,B
SBI - Subtração Imediata com Borrow
A instrução SBI é semelhante a SBB, porém a SBI utiliza o
um valor imediato como segundo operando da subtração.
Operação
A <- A - #$NN - Cy
Endereçamento
F(Flags)
S: A[bit 7]
Z: A == 0 ? 1 : 0
Ac: Borrow bit 4
P: #num bits 1 == par ? 1 : 0
Cy:Borrow bit 7
Ex:
SEC ; Carry <- 1
MVI A $#01
MVI B, #$01
SBI #$01
DAD - Double Addition - Adição Dupla
A instrução DAD realiza a operação aritmética de adição do registrador HL com os
pares de registradores H, B, D ou registrador SP.
Apenas a flag Carry(Cy) é alterada por essa instrução.
Operação
HL <- HL + P
Endereçamento
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:Carry bit 15
Ex:
LXI B, $#0001
LXI H, #$0001
DAD B ; HL = 0002
Histórico de atualizações
- 12/05/2026 - revisão 6 - Ajustes: objetivos, intro e descrições; Adição: Separação ADI, ACI, SUI e SBI
- 13/12/2024 - revisão 5 - Correção em 'operação' SUB e SBB
- 05/12/2024 - revisão 4 - Correção em intro; ajustes pontuais
- 09/09/2024 - revisão 3 - Correção em erros gramaticais, adição de flags afetadas
- 30/08/2024 - revisão 2 - Correção em links de objetivos
- 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
- 08/08/2023 - versão inicial
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.