Bonjour,
j'ai déclaré une structure :
Mais le compilateur "aligne" et réserve physiquement 32 bits pour mon "short int". Physiquement, " idtr . base " se trouve à " offset idtr + 4 ". Bon ... si on ne "parle" que C, ça ne pose pas de soucis, le compilateur s'y retrouve. Mais j'ai crée cette structure pour mémoriser les données fournies par l'instruction asm " SIDT " !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct _xDTR { short int limit ; int base ; } IDTR , GDTR , *PIDTR , *PGDTR ; ..... IDTR idtr ;
Et là, soucis ! car SIDT place le contenu du registre IDTR sur 6 bytes à l'emplacement spécifié (limit, sur 16 bits, et base sur 32 bits) ... de façon linéaire. Et quand je fais référence à "idtr . base" ... je ne retrouve pas la valeur correcte ... normal ... physiquement, le compilateur n'a pas réservé réellement 1 short + 1 long ... mais 2 long !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 __asm { ... SIDT idtr ... }
Comment faire pour indiquer au compilateur qu'il doit réserver l'équivalence physique de la déclaration de la structure, et de façon physiquement contigue (je ne sais pas si le compilateur "pourrait" physiquement scinder la structure).
J'espère vous avoir expliquer clairement, et merci à tous.
Partager