x86 exceções e sinalizadores

3

por favor, eu sei que quando você por exemplo divide por zero, o sinalizador aproptiate é setado no registrador de bandeira da CPU. Mas hoje eu li que há vetores especiais de interrupção (acho que os primeiros 16 em IVT) que são usados para tais condições, como dividir por zero. Então, o que eu quero perguntar é, qualquer situação que cesse alterar uma bandeira também desencadeia uma interrupção adequada? Na escola, usamos saltos condicionais que verificam se a flag de carry foi configurada ou não, e não me lembro de que houve alguma interrupção desencadeada por isso. Então estou muito confuso agora.

    
por user32569 03.05.2010 / 17:31

1 resposta

3

Existem dois tipos de interrupções.

O primeiro tipo são interrupções para sinalização de eventos de hardware, como se o temporizador de hardware tivesse decorrido ou que o controlador de disco rígido tivesse terminado de transferir dados para a memória.

O segundo tipo são interrupções para sinalizar alguma condição inesperada. Alguns exemplos são: acesso à memória inválida, divisão por zero (na verdade é "divide overflow" que ocorre não apenas quando você divide por zero, mas mesmo quando você divide um valor muito grande por um valor muito pequeno), breakpoint instruction, hardware breakpoint etc. Esse tipo de exceção é gerado pela CPU quando não consegue concluir a instrução atual e geralmente resulta no encerramento do processo atual ou no depurador. Na verdade, eles não estão relacionados a sinalizadores de CPU, que contêm os resultados da instrução mais recente.

    
por 03.05.2010 / 18:22