-En mode réel, les operante de "mot" font 16 bits, donc par ex,
91h = xchg AX, CX
05h 90h 90h 90h 90h = add AX, 9090h ; nop ; nop ;
on peut quand même faire référance aux registres de 32 bits grâce au prefixe "operand size overide" : 66h
66h 05h 90h 90h 90h 90h =add EAX, 90909090h ;
-En mode protégé, le mot est de 32 bits, donc :
91h = xchg EAX, ECX
05h 90h 90h 90h 90h = add EAX, 90909090h ;
On peut revenir à un adressage de 16 bits avec un prefixe "operand size overide" : 66h
66h 05h 90h 90h 90h 90h = add AX, 9090h ; nop ; nop ;
-Donc, dire qu'un segment est 16 bits ou 32 bits c'est juste indiquer à ton compilateur que quand tu ecrit :
add EAX, 90909090h
il faudrat générer : 66h 05h 90h 90h 90h 90h
ou 05h 90h 90h 90h 90h
-On peut remarquer aussi que l'assembler n'est pas lié au chargement d'un exécutable ... c le systeme qui le fait
-Donc, je comprend pas trop le sens de ta question !!! désolé ! Mais au chargement, il n'y a aucune différance entre un segment de code qui doit s'exécuté en mode réel 16 bits ou en mode protégé 32 bits ! Le segment sera de toute façon interprété par raport au mode du processeur en cours.
|