Objetivos
Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.
Instruções BCD, Complemento de 2 e Conversão
As instruções de conversão, são responsáveis por transformar dados byte em word e word em doubleword. Essas
instruções não afetam as flags de status e não possuem operandos.
Para trabalhar com valores BCD, utilizamos as instruções de ajuste BCD que são chamadas antes ou depois
de instruções ariméticas de soma, subtração, divisão e multiplicação.
Para trabalhar com complemento de 2, o 8086 fornece a instrução NEG que será estudada mais adiante.
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 |
Mais informações sobre registradores e flags podem ser vistas
em Registradores e Flags.
CBW - Converte Byte para Word
Essa instrução CBW, converte um valor Byte para Word levando em consideração o bit mais significativo
de AL que é replicado ou estendido nos bits do registrador AH.
Operação
AL(Bit 7) = 1
AH <- FFh
AL(Bit 7) = 0
AH <- 00h
Operando:
-
F(Flags)
O: -
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
MOV AL,FD ; -3
CBW
;AL = FB
;AH = FF
CBW - Converte Word para Doubleword
A instrução CBW, converte um valor Word para Doubleword levando em consideração o bit mais significativo
de AX que é replicado nos bits do registrador DX.
Operação
AX(Bit 15) = 1
DX <- FFh
AX(Bit 15) = 0
DX <- 00h
Operando:
-
F(Flags)
O: -
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
MOV AX,FFFD ; -3
CWD
;AX = FFFB
;DX = FFFF
AAA - Ajuste ASCII após Adição
Com a instrução AAA podemos ajustar um valor contido em AH e AL após a adição quando trabalhamos
com valores BCD. Os bits 4~7 do registrador AL são zerados durante o processo.
Operação
AL(Bits0~4) > 9 or Ac = 1
AL <- AL + 6
AH <- AH + 1
Ac <- 1
Cy <- 1
Caso contrário
Ac <- 0
Cy <- 0
Operandos
-
F(Flags)
O: ?
S: ?
Z: ?
Ac:a
P: ?
Cy:a
Ex:
MOV AX, 11 ; AH = 00, AL = 0Bh
AAA ; AH = 01, AL = 01 ; 11 BCD
AAD - Ajuste ASCII após Divisão
Usando a instrução AAD podemos ajustar um valor BCD, contidos em AH e AL, antes da divisão. Essa
instrução não possui operandos.
Operação
AL <- (AH*10) + AL
AH <- 0
Operandos
-
F(Flags)
O: ?
S: ?
Z: a
Ac:?
P: a
Cy:?
Ex:
MOV AX, 0104 ; AH = 01, AL = 04h
AAD ; AH = 00, AL = 0E ; 14
AAM - Ajuste ASCII após Multiplicação
Com o uso da instrução AAM, podemos ajustar um valor, contidos em AH e AL, após a multiplicação.
Essa instrução não possui operandos.
Operação
AH <- AH / 10
AL <- resto
Operandos
-
F(Flags)
O: ?
S: ?
Z: ?
Ac:a
P: ?
Cy:a
Ex:
MOV AL, 14 ; AL = 0Eh
AAM ; AH = 01, AL = 04 ; 14
AAS - Ajuste ASCII após Subtração
Fazendo uso a instrução AAS, podemos ajustar um valor, contidos em AH e AL, após uma subtração.
Os bits 4~7 do registrador AL são zerados durante o processo.
Operação
AL(Bits0~4) > 9 or Ac = 1
AL <- AL - 6
AH <- AH - 1
Ac <- 1
Cy <- 1
Caso contrário
Ac <- 0
Cy <- 0
Operandos
-
F(Flags)
O: ?
S: ?
Z: ?
Ac:a
P: ?
Cy:a
Ex:
MOV AX, 020Eh ;AL = 0Eh
AAS ;AH = 01, AL = 08 ; 18
DAA - Ajuste Decimal após Adição
Com a instrução DDA, podemos fazer um ajuste decimal um valor, contido em AL, após uma adição.
Essa operação não possui operandos.
Operação
AL(Bits0~4) > 9 or Ac = 1
AL <- AL + 6
Ac <- 1
AL > 9Fh ou Cy = 1
AL <- AL + 60
Cy <- 1
Operandos
-
F(Flags)
O: a
S: a
Z: a
Ac:a
P: a
Cy:a
Ex:
MOV AL, 0Eh
DAA ;AL = 14
DAA - Ajuste Decimal após Adição
Utilizando a instrução DAS, podemos fazer um ajuste decimal um valor, contido em AL, após uma subtração.
Essa operação não possui operandos.
Operação
AL(Bits0~4) > 9 or Ac = 1
AL <- AL - 6
Ac <- 1
AL > 9Fh ou Cy = 1
AL <- AL - 60
Cy <- 1
Operandos
-
F(Flags)
O: a
S: a
Z: a
Ac:a
P: a
Cy:a
Ex:
MOV AL, 0Eh
DAA ;AL = 14
Com a instrução NEG, podemos converter um valor, contido em um registrador ou em memória,
para seu valor em complemento de 2. Todas as flags são alterads por esse instrução.
Operação
~operando
operando <- operando + 1
Operandos
REG
MEM
F(Flags)
O: a
S: a
Z: a
Ac:a
P: a
Cy:a
Ex:
MOV AL, 03h
NEG AL
; AL = FD
Histórico de atualizações
- 18/02/2025 - revisão 1 - ajustes pontuais
- 06/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.