Eccezioni hardware
La maggior parte delle eccezioni standard riconosciute dal sistema operativo sono quelle definite a livello hardware. In Windows vengono riconosciute alcune eccezioni software di basso livello, ma queste sono generalmente gestite meglio dal sistema operativo.
In Windows il mapping degli errori hardware di processori diversi ai codici di eccezione viene eseguito in questa sezione. In alcuni casi, un processore può generare solo un subset di tali eccezioni. Le informazioni vengono sull'eccezione vengono pre-elaborate e viene generato il codice di eccezione appropriato.
Le eccezioni hardware riconosciute da Windows sono riepilogate nella tabella seguente:
Codice eccezione |
Causa dell'eccezione |
---|---|
STATUS_ACCESS_VIOLATION |
Lettura o scrittura in una posizione di memoria inaccessibile. |
STATUS_BREAKPOINT |
Rilevamento di punti di interruzione definiti a livello hardware; utilizzato solo dai debugger. |
STATUS_DATATYPE_MISALIGNMENT |
Lettura o scrittura nei dati in un indirizzo allineato in modo non corretto. Le entità a 16 bit devono ad esempio essere allineate su limiti di 2 byte. Non applicabile a processori Intel 80x86. |
STATUS_FLOAT_DIVIDE_BY_ZERO |
Divisione del tipo a virgola mobile per 0,0. |
STATUS_FLOAT_OVERFLOW |
Superamento del massimo esponente positivo del tipo a virgola mobile. |
STATUS_FLOAT_UNDERFLOW |
Superamento del minimo esponente negativo del tipo a virgola mobile. |
STATUS_FLOATING_RESEVERED_OPERAND |
Utilizzo di un formato a virgola mobile riservato (utilizzo non valido del formato). |
STATUS_ILLEGAL_INSTRUCTION |
Tentativo di eseguire un codice di istruzione non definito dal processore. |
STATUS_PRIVILEGED_INSTRUCTION |
Esecuzione di un'istruzione non consentita nella modalità del computer corrente. |
STATUS_INTEGER_DIVIDE_BY_ZERO |
Divisione di un tipo Integer per 0. |
STATUS_INTEGER_OVERFLOW |
Tentativo di eseguire un'operazione che supera l'intervallo dei numeri interi. |
STATUS_SINGLE_STEP |
Esecuzione di un'istruzione in modalità di istruzione singola; utilizzato solo dai debugger. |
Molte eccezioni presenti nella tabella precedente devono essere gestite dai debugger, dal sistema operativo o da altro codice di basso livello. Ad eccezione degli errori correlati ai tipi Integer e a virgola mobile, tali errori non devono essere gestiti nel codice. Di conseguenza, in genere è necessario utilizzare il filtro di gestione delle eccezioni per ignorarle (valutandole 0). In caso contrario, è possibile impedire ai meccanismi di livello più basso di rispondere in modo appropriato. È possibile, tuttavia, prendere le precauzioni necessarie per ridurre l'impatto potenziale di questi errori di basso livello tramite la scrittura di gestori di terminazione.