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

  1. Interrupções e IVT
  2. Interrupção de Hardware
  3. Interrupção de Software
  4. INTR, INT3 , INTO

Interrupções são o meio pelo qual um processador interrompe seu fluxo de execução para dar atenção ou atender a algum chamado de um periférico para um determinado tratamento. Uma vez que esse tratamento foi feito, o processador retorna para seu fluxo anterior.

O 8086 possui dois grupos de interrupção: Software e Hardware. Essa última se divide nos subgrupos Non-Maskarable Interrupt(NMI) e Maskarable Interrupt(INTR). As MNIs têm maior prioridade em relação às INTR.

Os termos Non-Maskarable Interrupt e Maskarable Interrupt significam interrupção não-mascaravél e mascarável respectivamente. Essa última interrupção pode ser inibida via flag I.

Tab.1: Interrupções 8086
INTR
Hardware MNI
Interrupção
Software

Tanto para os grupos quanto os subgrupos, todas as interrupções são identificadas pelos seus tipos que vão de 0 a 255 ou 00h a FFh.

O IVT(Interrupt Vector Table) é o local onde ficam definidos os endereços ou espaços destinados às rotinas(ISR) de tratamento de interrupções. Cada local no IVT tem o tamanho de 4 bytes para armazenar endereços de 16-bits.

A tabela abaixo lista representa o vetor de interrupções nativo do 8086 que está compreendido entre 0x000~3FF e que deve ser utilizado de acordo.

Tab.2: IVT 8086
Tipo Endereço Descrição
0 000000 Divisão por Zero. Reset inicial CS:IP
1 000004 Debug
2 000008 NMI
3 00000C INT 3 - Break
4 000010 INTO - Overflow
5~31 000014 Reservado
32~255 000080 Interrupção Soft. e Hard.

As interrupções MNI são causadas por hardwares ligados ao 8086 utilizando sua pinagem que é acionada quando esse tipo de interrupção ocorre.

Quando uma interrupção desse tipo ocorre, os seguintes passos abaixo são executados automaticamente:

Fluxo de execução:
  1. A conclusão da execução da instrução atual é feita.
  2. Salva o PSR(Flags) na pilha
  3. Carrega IP com endereço 16-bits contido em $00008
  4. Carrega CS com endereço 16-bits contido em $0000A
  5. As flags I e T são resetadas para 0

O usuário/programador não precisa se preocupar com os passos acima, o 8086 lida com todo o processo precisando apenas que uma rotina de tratamento deve ser informada no IVT.

É responsabilidade do hardware que utiliza o 8086 configurar corretamente o acionamento de uma interrupção MNI.

As interrupções INTR são interrupções mascaráveis ativadas pelas portas de entrada e saída e usam o pino INTA para reconhecimento e um controlador de interrupção que envia o tipo da interrupção que deve ser executada.

Quando uma interrupção desse tipo ocorre, os seguintes passos abaixo são executados automaticamente:

Fluxo de execução:
  1. A conclusão da execução da instrução atual é feita.
  2. Ativa INTA e recebe o tipo da interrupção
  3. Salva PSR, CS e IP na pilha
  4. Carrega IP com endereço 16-bits contido em Tipo*4
  5. Carrega CS com endereço 16-bits contido em Tipo*4 + 4
  6. As flags I e T são resetadas para 0

É responsabilidade do hardware que utiliza o 8086 utilizar corretamente o pino INTA e controlador de interrupções ser configurado corretamente.

As interrupções de software são lançadas manualmente, em qualquer momento para rotinas importantes do programa, realizar depuração e outros. Esse tipo de interrupção é lançada utilizando a instrução INT. Essas interrupções podem ser inibidas utilizando a flag I.

Sintaxe:

INT NNN;

Por boa prática, a INT deve ser utilizada com os tipos 35~255 como valor imediato de acordo com o IVT visto anteriormente.

Quando uma interrupção de software ocorre, os seguintes passos abaixo são executados automaticamente:

Fluxo de execução:
  1. Salva o PSR(Flags) na pilha
  2. Salva o endereço de retorno CS:IP na pilha
  3. Carrega IP com endereço 16-bits contido em NNN*4
  4. Carrega CS com endereço 16-bits contido em NNN*4 + 4
  5. As flags I e T são resetadas para 0

É responsabilidade do usuário/programador associar suas rotinas de tratamento. Essas rotinas devem conter a instrução IRET em seu fim para que o fluxo de execução seja restaurado corretamente.

  1. 18/02/2025 - revisão 1 - ajustes pontuais
  2. 30/10/2024 - versão inicial