Codes d'erreur d'interruption

Toutes les interruptions entre 0 et 32 sont des interruptions d'erreur.

Certains codes d'erreur peuvent être corrigés après le retour de l'interruption. Cependant, d'autres ne peuvent pas l'être.

IdNomcontient un code d'erreur ?Descriptions
0Division par 0nonCette erreur est produite quand l'instruction DIV/IDIV est utilisée avec un 0
1DebugnonCette erreur intentionnelle est généralement utilisée pour déboguer
2Interruption NMInonL'interruption NMI est une interruption causée par des éléments externes comme la RAM
3BreakpointnonCette erreur intentionnelle est généralement utilisée pour le débogage
4DépassementnonL'interruption 4 est causée lorsque l'instruction INTO est éxécuté alors que le bit 11 de RFLAGS est mis à 1.
Note : l'erreur n'est pas possible en 64 bits car l'instruction INTO n'est pas disponible en mode long.
5Dépassement de tablenonL'interruption 5 est causée lorsque l'instruction BOUND est exécutée quand opérateur 1 n'est pas dans la taille de table définie dans l'opérateur 2.
Note : l'erreur n'est pas possible en 64 bits car l'instruction BOUND n'est pas disponible en mode long.
6Instruction non validenonL'interruption 6 est causée lorsque :
- On essaye d'accéder à un registre non existant
- On essaye d'exécuter une instruction non disponible
- UD est exécuté
7Appareil non disponiblenonL'interruption 7 est appelée lorsqu'on essaye d'initialiser le FPU alors qu'il n'existe pas
8Faute DoubleouiLa faute double est appelée lorsqu'il y a une erreur pendant que l'interruption d'erreur est appelée (une erreur dans une erreur)
9Erreur de Segment de coprocesseurnonCette erreur n'est plus utilisée.
10TSS invalideoui (code d'erreur de segment)L'interruption TSS invalide est exécutée lorsque le sélecteur de segment pour la TSS est invalide.
Causée pendant un changement de tâche ou pendant l'accès de la TSS
11Segment non présentoui (code d'erreur de segment)L'interruption "Segment non présent" est exécutée lorsqu'on essaye de charger un segment qui a son bit présent à 0
12Segment de pile invalideoui (code d'erreur de segment)L'interruption "Segment de pile" invalide est causée lorsque :
- On charge un segment de pile qui n'est pas présent
- La vérification de la limite de pile n'est pas possible
- (64bit) On essaye de faire une opération qui fait une référence à la mémoire en utilisant le pointeur de pile (RSP) qui contient une adresse mémoire non canonique
- Le segment de pile n'est pas présent pendant une opération qui fait référence au registre SS, (comme pop, push, iret ...)
13Faute générale de protectionoui (code d'erreur de segment)L'interruption n°13 peut être causée par beaucoup de raisons, comme :
- L'écriture d'un 1 dans une zone du registre CR4 réservée
- L'utilisation une instruction SSE qui essaye d'accéder une zone de la mémoire 128 bits qui n'est pas alignée en 16bit
- Une pile de mémoire non alignée en 16bit [...].

Voir le manuel Intel pour plus d'informations (chap 3 6.15.13)
14Faute de pageoui (code d'erreur de page)L'interruption n°14 peut être causée lorsque :
- Il y a une erreur en relation avec le paging
- On essaye d'accéder à une zone de la mémoire qui n'a pas de table présente
- On essaye de charger une table et que la zone ou on éxécute le code n'est pas exécutable dans la page
- Un problème d'autorisation est causé (ex: écrire dans une zone de la mémoire qui ne peut pas être écrite) [...]

Voir le manuel Intel pour plus d'informations (chap 3 6.15.14)
15Réservénon//
16Faute du FPU x87nonL'interruption n°16 est causée lorsqu'il y a une erreur pendant une instruction du FPU, une opération invalide, une division par 0, un dépassement numérique, un résultat non exact, ou lorsque le bit 5 du registre CR0 = 1
17Faute d'alignementouiProduite lorsque le bit 18 de CR0 et RFLAGS sont égaux à 1. L'erreur est causée lorsqu'une référence de mémoire est non alignée.
18Faute de vérification de machinenonProduite lorsque le bit 6 du CR4 est égal à 1. L'erreur est causée lorsque le CPU détecte une erreur de machine, comme un problème de bus, cache, mémoire, ou une erreur interne.
19Exception de variable a virgule SIMDnonL'interruption n°19 est appelé lorsqu'il y a une erreur avec les nombres à virgule pendant une opération SSE : division par 0, dépassement numérique, résultat non exact [...]
20Exception de virtualisationnonL'exception de virtualisation est appelée lorsqu'il y a une violation de droits avec une instruction EPT
21 à 31réservénon//
///Faute triplenonL'exception faute triple est exécutée lorsqu'il y a une erreur pendant l'interruption de faute double (une erreur dans une erreur dans une erreur). L'interruption faute triple cause un redémarrage de la machine.

Codes d'erreur d'une faute de page

BITNOMDESCRIPTION
0P(p=1)
Violation de protection

(p=0)
la page n'est pas présente
1W(W=0)
Causée par une lecture

(W=1)
Causée par une écriture
2U(U=1)
La page n'est pas utilisateur alors que CPL = 3
3R(R=1)
La page contient un bit réservé
4I(I=1)
Lecture à cause d'une instruction
5PK(PK=1)
Violation de droit de clé
6SS(SS=1)
Accès à "l'ombre de la pile"
7-31//Réservé

Lors d'une faute de page, l'addresse qui a causé l'exception est stockée dans CR2.

Codes d'erreur d'une faute générale de protection

BITNOMTAILLEDESCRIPTION
0E1(E=1)
Provient d'un appareil externe au processeur
1TBL2(TBL=0)
Provient de la GDT

(TBL=1)
Provient de l'IDT

(TBL=2 & TBL=3)
Provient de la LDT
3Index13Index de la table sélectionnée dans TBL