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.