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.

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

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

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

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

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

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

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

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
  1. 18/02/2025 - revisão 1 - ajustes pontuais
  2. 06/12/2024 - versão inicial