Objetivos
As instruções referente às flags do 8086 têm como propósito setar(1), resetar(0), ou inverter
seus valores. Apenas as flags Carry, Interrupt e Direction são suportadas por essas instruções.
O modo de endereçamento implícito é utilizado.
Notação utilizada:
|
|
<- |
Atribuição |
! |
Complemento |
; |
Comentário |
Flags |
|
a |
Alterada de acordo com resultado |
- |
Não sofre alteração |
0 |
Sempre zero |
1 |
Sempre um |
Mais informações sobre os registradores e flags podem ser vistas
em Registradores e Flags.
Mais informações sobre interrupção podem ser vistas
em Interrupções.
Ao executar a instrução STC, a flag Carry tem seu valor alterado para 1. Essa instrução
pode ser utilizada em conjunto com instruções aritméticas, por exemplo.
Operação:
Cy <- 1
Operandos
-
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:1
Ex:
MOV AL, 1
MOV BL, 1
STC
ADC BL, AL ; BL <- AL + BL + 1
STI - Set Interrupt Enable
Executando a instrução STI, a flag Interrupt tem seu valor alterado para 1. Assim,
as interrupções(INTR,INT) são habilitadas para serem reconhecidas pelo 8086.
Operação:
I <- 1
Operandos
-
F(Flags)
I: 1
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
;carregamento de dados
STI
;aguardar interrupção
Quando usamos a instrução STD, a flag Direction tem seu valor alterado para 1. Assim,
os registradores SI e DI serão decrementados em 1 ou 2 bytes de acordo com as instruções que utilizam essa
flag.
Operação:
D <- 1
Operandos
-
F(Flags)
I: -
D: 1
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
STD
Ao usar a instrução CLC, a flag Carry tem seu valor alterado para 0. Essa instrução
pode ser utilizada em conjunto com instruções aritméticas, por exemplo.
Operação:
Cy <- 1
Operandos
-
F(Flags)
I: -
S: -
Z: -
Ac:-
P: -
Cy:0
Ex:
MOV AL, 0FFh
MOV BL, 01h
ADD BL,AL ;Cy <- 1
CLC ;Cy <- 0
Ao executar a instrução CLI, a flag Interrupt Enable tem seu valor alterado para 0.
Dessa forma, as interrupções(INTR, INT) são desabilitadas não sendo reconhecidas pelo 8086.
Operação:
I <- 0
Operandos
-
F(Flags)
I: 0
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
CLI
;Carregamento de dados
STI
;Aguardar interrupção
Quando usamos a instrução CLD, a flag Direction tem seu valor alterado para 0.
Assim, os registradores SI e DI serão decrementados em 1 ou 2 bytes de acordo com as instruções
que utilizam essa flag.
Operação:
D <- 0
Operandos
-
F(Flags)
I: -
D: 0
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
MOV AX, CS
MOV DS, AX ;Seta regs. de segmento
MOV ES, AX
LEA SI, vetor1 ; operando1
LEA DI, vetor2m ; operando2
MOV CX, 4 ; qtd bytes
CLD ; incrementar DI e SI
REPE CMPSB ; comparação
; tratamento não igual
loop:
JMP loop
vetor1 db 1, 2, 3, 4
vetor2 db 1, 2, 3, 4
Ao usar a instrução CMC, a flag Carry tem seu valor invertido ou complementado. Essa instrução pode
ser executar em conjunto com instruções aritméticas, por exemplo.
Operação:
Cy <- !Cy
1 -> 0
0 -> 1
Operandos:
-
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:0
Ex:
MOV Al, 0FFh
ADD AL,1 ; Cy <- 1
CMC ; Cy <- 0
Histórico de atualizações
- 18/02/2025 - revisão 1 - ajustes pontuais
- 10/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.