segemnt_donnees est la valeur de l'adresse de segment de la variable ref
segment_code_32bits est la valeur de l'adresse de segment où se trouve nullint.
Le code que je t'ai donnée fonctionne avec TASM il faut faire quelques petites transformation pour ta ligne c'est:
| ef dw nullint, selecteur_de_nullint, 9E00h, 0 |
La structure d'une entrée dans l'IDT s'appelle un descripteur d'interruption en voici la structure:
taille du descripteur: 8 octets
offset, taille, description
0, 2, partie basse de l'offset du vecteur d'interruption
2, 2, selecteur de code du vecteur d'interruption
4, 1, valeur nulle (0)
5, 1, attributs
6, 2, partie haute de l'offset du vecteur d'interruption
description des attributs:
bit de début, nombre de bits, description
0, 4, type de descripteur d'interrruption (0Eh)
4, 1, valeur nulle
5, 2, DPL du descripteur (niveau de privilège): c'est la ring
7, 1, bit de présence: doit être à 1 sinon provoque une exception de segement absent
types de desctipteurs:
- 05h: Porte d'appel (call gate)
- 06h: Porte d'interruption 16bits (la partie haute de l'offset est alors ignorée et le sélecteur doit conserner un segment 16 bits)
- 07h: Porte de trappe 16bits (une trappe permet que le flag IF, flag d'interuption ne soit mis à 0 lorque se déclenche l'interruption et ceci contrairement à la porte d'interruption)
- 0Eh: Porte d'interruption 32bits
- 0Fh: Porte de trappe 32bits
Core Breaker 