Buscar

Interface Hardware-Software - 07 Aula IHS Interrupções

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Interface Hardware-Software 
Interrupções 
Interrupções 
 Interrupção é um evento faz o processador parar o 
programa em execução 
– Não para necessariamente no mesmo momento que a 
interrupção é sinalizada 
– Pode parar quando for mais conveniente 
 
 Uma rotina de tratamento da interrupção deve ser 
executada 
 
Fluxo de Execução na Ocorrência de 
Interrupções 
Programa do usuário 
Rotina de tratamento de interrupção 
(ISR – Interrupt Service Routine) 
Eventos Internos e Externos 
 Eventos internos gerados pela execução do programa 
podem causar interrupções 
– Divisão por zero 
– Utilização de instruções que invocam interrupções 
 Interrupções gerados por eventos internos são chamados 
de Interrupções de SW ou Exceções 
 Eventos externos a execução do programa podem também 
causar interrupções 
– Comunicação E/S 
– Erros de dispositivos de HW 
 Interrupções gerados por eventos externos são chamados 
de Interrupções de HW 
 
Taxonomia das Interrupções 
Interrupções de HW 
 Interrupções de HW são causadas por algum dispositivo 
conectado ao processador 
 Interrupções de HW são ativadas por duas entradas do 
processador NMI (NonMaskable Interrupt) e INTR 
(INTerrupt Request) 
 O INTR pode ser habilitado ou desabilitado com algumas 
instruções específicas do processador x86 
– Ex: STI (Set Interrupt flag), CLI (Clear Interrupt flag) 
 NMI está associada a erros de HW 
 NMI não pode ser desabilitada, deve ser tratada 
 
 
Interrupções de SW 
 Processadores x86 oferecem instruções que dão suporte 
ao tratamento de interrupções 
– int 
– into 
– iret/iretd 
– Bound 
 Estas instruções permitem invocar ou retornar das rotinas 
de tratamento de interrupções, além de realizar operações 
para a manutenção do estado do processador 
Instrução INT 
 Causa uma interrupção de SW especificada por tipo 
– Tipo é um número de oito bits que espefica qual rotina de 
tratamento de interrupção será chamada 
 Registrador de Flags é empilhado 
– Garante a manutenção do estado interno do processador 
 Zera a interrupt-enable flag e a trace flag (TF) 
– Impede que interrupções via INTR, e interrupções de single-
step sejam reconhecidas durante o processamento da 
interrupção 
 CS e IP são empilhados 
 
 
 
int tipo 
Forma Geral 
Utilizando a Instrução INT 
org 0x100 
jmp start 
string: times 10 db 0 
start: mov ah,0 
 int 16h 
 sub al,'0‘; Leu caractere, transforma para numero 
 cbw 
 mov cl,3 
 mul cl 
 call printNumber; chama rotina de impressao 
 jmp exit 
 ; continua 
 
Interrupção da 
BIOS para ter 
acesso ao 
teclado 
Programa lê um número do teclado, 
multiplica por 3 e coloca a saída no 
monitor 
Utilizando a Instrução INT 
printNumber: ; rotina converte cada digito para caracter 
 mov cx,0 
 lea si,[string] 
 mov bl,10 
 while: div bl; al = ax/10, ah = ax%10 
 inc cx; guarda qtd dígitos 
 mov bh,ah 
 add bh,'0‘; converte digito 
 mov [si],bh; salva na memória, 
 add si,1; anda com indice 
 cbw 
 cmp al,0; verifica se quociente == 0 
 jnz while 
 sub si,1 
 for: 
 std; dec df, a str salva na ordem inversa 
 lodsb 
 mov ah, 0eh 
 mov bh,0 
 int 10h 
 loop for 
 ret 
Interrupção para 
ter acesso a 
serviços de 
vídeo 
Instruções IRET/IRETD (Interrupt Return) 
 Toda ISR deve conter iret no final para retornar ao 
programa que causou a interrupção 
 
 CS e IP são desempilhados 
 Registrador de flags é desempilhado 
 iretd deve ser utilizado quando se está utilizando 
endereçamento de 32 bits 
 
 
 
 
iret 
Formas Gerais 
iretd 
Instrução INTO 
 Esta instrução ativa a interrupção tipo 4 quando a flag de 
overflow estiver ativada 
– A rotina de tratamento para este tipo de interrupção é 
chamada 
 
 Caso a flag não esteja ativada, a instrução não faz nada 
 
 
 
into 
Forma Geral 
Instrução BOUND 
 Testa se indice está dentro de um intervalo 
numérico, caso não esteja a interrupção 05H é gerada 
– indice deve ser um registrador de 16 ou 32 bits 
– intervalo é dado por uma posição de memória para um 
número de 16 ou 32 bits 
– indice é testado com o número presente na posição de 
memória intervalo e o número presente na posição de 
memória de intervalo + um word ou double word 
 A rotina de tratamento da Int 05H, no DOS é associada a 
impressão na tela. Portanto, deve-se mudar a rotina 
 
 
 
 
 
bound indice,intervalo 
Forma Geral 
Utilizando a Instrução BOUND 
org 0x100 
jmp start 
limites:dw 0,3 
vetor: db 10,23,12,80 
start: mov ax,0 
 mov si,0 
 mov bx, vetor 
 laco: add bx,si 
 bound si,limites 
 add ax,[bx] 
 inc si 
 ... 
 
Se índice não 
estiver dentro 
dos limites do 
vetor, 
interrupção 5 é 
gerada 
Programa soma elementos de vetor, 
testando índice do vetor 
Prioridades de Interrupções 
 Se uma interrupção de HW acontecer simultaneamente a 
uma de SW, o processador atenderá a de maior prioridade 
 
 
 
Tipo Nível de prioridade 
Divisão por zero Mais alta 
INT e INTO 
NMI 
INTR 
Single step Mais baixa 
Exemplos de Geração de Interrupção 
mov bl, 0 
div bl 
pushf 
pop ax 
or ax,100h 
push ax 
popf 
lodsb 
mov ah, 0EH 
mov bh,0 
int 10h 
Divisão por zero 
(tipo 0) 
Single step ou trap 
(tipo 1), TF é 
colocada com o 
valor 1 
Interrupção a cada 
instrução executada 
Serviço de vídeo 
(tipo 16 ou 10H) 
Imprime caracter 
Tabela de Vetor de Interrupções 
 Em modo real, toda interrupção (HW ou SW) aponta para 
uma entrada única e específica da tabela de vetor de 
interrupções 
 Cada interrupção é identificada por um número de 8 bits 
– 256 interrupções possíveis 
 Cada entrada da tabela é composta por um vetor de 4 
bytes (2 bytes para o IP e 2 bytes para o CS), que indica 
para onde o programa deve pular para iniciar o tratamento 
da interrupção 
– Tamanho da tabela 256 x 4 → 1024 bytes 
– Faixa de endereços (0 – 003FFH) 
 
 
 
Significado Recomendado pela Intel das 
Entradas da Tabela 
 Pode-se programar para 
que rotinas de tratamento 
de interrupções diferentes 
sejam associados a estas 
entradas 
– Exemplo: Entrada 10h(16) 
em modo real é utilizado 
para serviços de vídeo 
 
 
 
Como Encontrar a Entrada da Tabela de Vetor 
de Interrupções? 
 
 Deve-se multiplicar o 
número que identifica o 
tipo de interrupção por 4, 
e o resultado é igual ao 
endereço da entrada da 
tabela 
 
 
Exemplo: Configurando uma Chamada de ISR 
 Como configurar a interrupção 40 para chamar um ISR 
localizado no endereço 28000H? 
 Solução: 
– 1.Devemos achar um valor para CS e IP que juntos deem o 
endereço desejado 
 Exemplo: CS = 2800H e IP = 0, CS << 4 + IP = 28000H 
– 2. Calcular o endereço para onde vamos salvar estes valores 
 Endereço = 40 x 4 = 160 = 00A0H 
– 3. Salvar CS e IP na posição de memória calculada em 2 
 
 
Código da Configuração da Chamada do ISR 
push ds; salvando DS na pilha 
mov ax, 0 
mov ds, ax; novo end de DS é 0 
mov di,00A0H; offset de INT 40 
mov word[di],0; colocando IP 
mov word[di + 2], 2800H; colocando CS 
pop ds; carregando valor antigo de DS 
Sequencia de Passos Executados Pelo 
Processador Antes de Executar oISR 
1. Obter o número da interrupção 
Pode ser feito de 3 formas: 
1. Pode vir especificado na interrupção (ex: INT 21) 
2. Processador mesmo gera a interrupção (ex: INTO, divisão por 
zero, NMI) 
3. Processador obtém número do barramento depois de receber um 
INTR 
2. Salvar o estado do processador 
1. Empilha flags 
2. Zera as flags interrupt-enable e trace 
3. Empilha CS e IP 
3. Buscar o novo CS:IP 
– Ir na tabela de vetores de interrupção 
 
 
 
Ciclo de Processamento de Interrupções 
Múltiplas Interrupções 
 Caso ocorram interrupções simultâneas, a de mais alta 
prioridade será reconhecida primeira 
 
 No caso de chegar uma interrupção de mais alta prioridade 
(ex: divisão por zero) e uma NMI, as duas devem ser 
tratadas embora a primeira seja reconhecida antes 
 
 No caso de chegar uma interrupção de mais alta prioridade 
(ex: divisão por zero) e uma INTR, a primeira é tratada e só 
depois de finalizada a INTR é tratada 
 
 
 
 
Exemplo de Múltiplas Interrupções 
Esquema de um ISR 
push ax; salvam-se os registradores 
push bx 
push cx 
; corpo do ISR 
pop cx; restauram-se os registradores 
pop bx 
pop ax 
iret ; retorna da interrupção 
 Embora ISRs se distingam de como tratam as diferentes 
interrupções, algumas ações são comuns a todos 
DIVERR:push si 
 push cx 
 push bx 
 
 mov cx, 0 
 lea si,[msgErr] 
 loop: ;imprime mensagem de erro 
 lodsb 
 cmp cl,al 
 je exit 
 mov ah, 0EH 
 mov bh,0 
 int 10H 
 jmp loop 
 ;;continua 
 
Exemplo do Corpo de uma ISR (1) 
ISR para tratar divisão por zero 
Salva contexto 
 exit: 
 mov ax,101H; colocar um valor padrao em ax 
 mov dx, 0 ;zerar o dx 
 pop bx 
 pop cx 
 pop si 
 iret 
 msgErr: db ‘Divisao por zero', 0 
Exemplo do Corpo de uma ISR (2) 
ISR para tratar divisão por zero 
Retorna da 
interrupção e 
restaura 
contexto anterior

Continue navegando