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

As instruções aritméticas são utilizadas para realizar as operações básicas de adição, subtração, multiplicação, divisão e incremento/decremento de registradores ou valores em memória. As flags O, Z, S, P, Cy Ac são afetadas por essas instruções.

Os registradores CS, DS, SS e ES não podem ser utilizados como operandos de instrução e soma, subtração, nultiplicação e divisão.

Para trabalhar com valores BCD, as instruções de conversão/BCD que podem ser vistas em Conversão devem ser utilizadas.

Mais informações sobre registradores e flags podem ser vistas em Registradores e Flags.

Notação utilizada
; Comentário
REG Registrador de uso geral
SREG Registrador de segmento
MEM Endereço de memória
IME Valor imediato
Flags
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero
1 Sempre um
? Indefinido

Essa instrução INC, incrementa em 1 um valor contido em registrador ou memória. Todas as flags de status são alteradas, exceto Cy.

Operação
operando <- operando + 1
Operando:
REG
MEM
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:-
Ex:
MOV AL,1
INC AL
;AL = 2

A instrução DEC, de forma oposta à INC, decrementa em 1 um valor contido em registrador ou memória. Todas as flags de status são alteradas, exceto Cy.

Operação
operando <- operando - 1
Operando:
REG
MEM
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:-
Ex:
MOV AL,2
DEC AL
;AL = 1

Com a instrução ADD podemos realiza a operação aritmética de adição entre registradores, valor imediato ou valor contido em memória. Todas as flags são alteradas por essa instrução.

Operação:
operando1 <- operando1 + operando2
Operandos:
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
MOV AL, 1
ADD AL, 1
;AL = 2

A instrução ADC é semelhante a ADD, porém a ADC utiliza o flag Carry(Cy) como um terceiro operando ao realiza a operação de adição. Todas as flags são alteradas por essa instrução.

Operação
operando1 <- operand1 + operand2 + Cy
Operandos
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
STC  ;Cy <- 1
MOV AL, 1  
ADC AL, 1  
;AL = 3

Usando a instrução SUB podemos realizar a operação aritmética de subtração entre registradores, valor imediato ou um valor em memória. Todas as flags são alteradas por essa instrução.

Operação
operando1 <- operand1 - operand2
Operandos
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
MOV AL, 2  
SUB AL, 1  
;AL = 2

A instrução SBB é semelhante a SUB, porém a SBB utiliza o flag Carry como "vem-um" como terceiro operando ao realiza a operação de subtração. Todas as flags são alteradas por essa instrução.

Operação
operando1 <- operand1 - operand2 - Cy
Operandos
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
STC
MOV AL, 3  
SBC AL, 1  
;AL = 2

Com as instrução MUL e IMUL podemos realizar a operação aritmética de multiplicação de um valor byte ou word por um registrador ou valor em memória. Apenas AX ou AL podem ser usados operandos.

MUL trabalha com divisão com números não-sinalizados enquanto a IMUL trabalha com números sinalizados.

Operação
Para operando Byte:
AX <- AL * operando

Para operando Word:
DX:AX <- AX * operando
Operandos
REG
MEM
F(Flags)
O: a
S: ?
Z: ? 
Ac:?
P: ?
Cy:a
Ex:
MOV AL, 2
MOV BL, 2
MUL BL
; AX <- 0004h

Com as instrução DIV e IDIV podemos realizar a operação aritmética de divisão de um valor byte ou word como operando por um registrador ou valor em memória.

DIV trabalha com divisão com números não-sinalizados enquanto a IDIV trabalha com números sinalizados.

Operação
Para operando Byte:
AL <- AX/operando
AH <- resto

Para operando Word:
AX <- DXAX/operando
DX <- resto
Operandos
REG
MEM
F(Flags)
O: ?
S: ?
Z: ? 
Ac:?
P: ?
Cy:?
Ex:
MOV AL, 4
MOV BL, 2
MUL BL
; AL <- 02h
; AH <- 00h
  1. 15/05/2026 - revisão 3 - Ajustes: objetivos e descrição MUL/DIV
  2. 18/02/2025 - revisão 1 - ajustes pontuais
  3. 05/12/2024 - versão inicial