Objetivos
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
ADC - Adicionar com Carry
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
SBB - Subtração com Borrow
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
MUL/IMUL - Multiplicação sinalizada/Não-sinalizada
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
DIV/IDIV - Divisão Sinalizada/Não-sinalizada
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
Histórico de atualizações
- 15/05/2026 - revisão 3 - Ajustes: objetivos e descrição MUL/DIV
- 18/02/2025 - revisão 1 - ajustes pontuais
- 05/12/2024 - 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.