Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Instruções para flags
  2. Instrução STC
  3. Instrução STI
  4. Instrução STD
  5. Instrução CLC
  6. Instrução CLI
  7. Instrução CLD
  8. Instrução CMC

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

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