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