Bonjour,
j'ai déclaré une structure :
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  ;
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
 
__asm
{ ...
SIDT  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 !
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.