Je suis en train de lire le manuel Intel 3A Chapitre 6 Interruptions et gestion des exceptions.Quelle est la différence entre une interruption générée par logiciel et une exception générée par un logiciel?
Interrupt et Exception ont respectivement 3 sources.
de logiciels générés Interrompre, il dit:
L'instruction INT n permet interruptions d'être générées à partir de logiciel en fournissant un numéro de vecteur d'interruption comme opérande. Pour l'exemple , l'instruction INT 35 force un appel implicite au gestionnaire d'interruption pour l'interruption 35. N'importe lequel des vecteurs d'interruption 0 à 255 peut être utilisé en tant que paramètre dans cette instruction. Si le vecteur NMI prédéfini du processeur est utilisé, la réponse du processeur ne sera pas la même que celle d'une interruption NMI générée normalement. Si le vecteur numéro 2 (le vecteur NMI ) est utilisé dans cette instruction, le gestionnaire d'interruption NMI est appelé , mais le matériel de traitement NMI du processeur n'est pas activé. Les interruptions générées dans un logiciel avec l'instruction INT n ne peuvent pas être masquées par l'indicateur IF dans le registre EFLAGS.
Pour Exceptions aux logiciels générés, il dit:
INTO, INT 3 et instructions BOUND exceptions de permis d'être générés dans le logiciel. Ces instructions permettent de vérifier les conditions d'exception à effectuer aux points du flux d'instructions. Pour l'exemple , INT 3 génère une exception de point d'arrêt. L'instruction INT n peut être utilisée pour émuler des exceptions dans un logiciel; mais il est une limitation. Si INT n fournit un vecteur pour l'une des exceptions définies par l'architecture , le processeur génère une interruption vers le vecteur correct (pour accéder au gestionnaire d'exceptions) mais ne transmet pas un code d'erreur sur la pile. Cela est vrai même si l'exception générée par le matériel associée à génère normalement un code d'erreur . Le gestionnaire d'exceptions tentera toujours d'afficher un code d'erreur à partir de la pile tout en gérant l'exception. Parce qu'aucun code d'erreur n'a été poussé, le gestionnaire va sauter et rejeter l'EIP à la place (en place du code d'erreur manquant). Cela renvoie le mauvais emplacement .
Alors, quelle est la différence? Semble les deux tirer parti de l'instruction int n
. Comment puis-je savoir s'il génère une exception ou une interruption dans un code d'assemblage?
Il s'agit d'un détail obscur qui n'a d'importance que pour quelqu'un qui écrit un système d'exploitation en mode protégé. Comme indiqué, il ferait mieux de s'assurer qu'un INTn avec n <32 génère également une exception ou que le gestionnaire d'interruption va mal se comporter. Fait en ayant la porte force une transition en anneau (aka DPL