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 de 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 um valor contido em um endereço de 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 contido em um endereço de 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, em um registrador ou valor em memória via AX ou AL apenas. A primeira instrução
trabalha com valor não-sinalizado e a segunda trabalha com valor sinalizado que é estendido no resultado.
Operação
Para valor Byte:
AX <- AL * operando
Para valor Word:
DXAX <- 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, em um registrador ou valor em memória tendo o resultado. A primeira instrução,
DIV, trabalha com valor não-sinalizado, enquanto IDIV trabalha com valor sinalizado.
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
- 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.