Objetivos
Interrupções
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:
- A conclusão da execução da instrução atual é feita.
- Salva o PSR(Flags) na pilha
- Carrega IP com endereço 16-bits contido em $00008
- Carrega CS com endereço 16-bits contido em $0000A
- 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:
- A conclusão da execução da instrução atual é feita.
- Ativa INTA e recebe o tipo da interrupção
- Salva PSR, CS e IP na pilha
- Carrega IP com endereço 16-bits contido em Tipo*4
- Carrega CS com endereço 16-bits contido em Tipo*4 + 4
- 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:
- Salva o PSR(Flags) na pilha
- Salva o endereço de retorno CS:IP na pilha
- Carrega IP com endereço 16-bits contido em NNN*4
- Carrega CS com endereço 16-bits contido em NNN*4 + 4
- 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.
Histórico de atualizações
- 18/02/2025 - revisão 1 - ajustes pontuais
- 30/10/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.