alignement parasite dans une structure !
Bonjour,
j'ai déclaré une structure :
Code:
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:
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.