Article de reference

Modèles de mémoire x86

En informatique , les modèles de mémoire x86 sont un ensemble de six modèles de mémoire différents du processeur x86 fonctionnant en mode réel qui contrôlent la manière dont les...

En informatique , les modèles de mémoire x86 sont un ensemble de six modèles de mémoire différents du processeur x86 fonctionnant en mode réel qui contrôlent la manière dont les registres de segment sont utilisés et la taille par défaut des pointeurs.

Segmentation de la mémoire

Quatre registres sont utilisés pour faire référence à quatre segments sur l'architecture mémoire segmentée x86 16 bits. DS ( segment de données ), CS ( segment de code ), SS ( segment de pile ) et ES (segment supplémentaire). Un autre registre 16 bits peut servir de décalage dans un segment donné, et donc une adresse logique sur cette plate-forme est écrite segment : offset , généralement en notation hexadécimale . En mode réel, afin de calculer l'adresse physique d'un octet de mémoire, le matériel décale le contenu du registre de segment approprié de 4 bits vers la gauche (multipliant ainsi par 16), puis ajoute le décalage.

Par exemple, l'adresse logique 7522:F139 donne l'adresse physique sur 20 bits :

Notez que ce processus conduit à un aliasing de la mémoire, de sorte que toute adresse physique donnée possède jusqu'à 4096 adresses logiques correspondantes. Cela complique la comparaison des pointeurs vers différents segments.

Tailles des pointeurs

Les formats de pointeur sont appelés near , far ou huge .

  • Les pointeurs proches sont des décalages de 16 bits dans le segment de référence, c'est-à-dire DS pour les données et CS pour le code. Ce sont les pointeurs les plus rapides, mais ils sont limités à 64 Ko de mémoire (sur le segment associé au type de données). Les pointeurs proches peuvent être conservés dans des registres (généralement SI et DI).
mov bx , mot [ reg ] mov ax , mot [ bx ] mov dx , mot [ bx + 2 ]
  • Les pointeurs lointains sont des pointeurs 32 bits contenant un segment et un décalage. Pour les utiliser, le registre de segment ES est utilisé en utilisant l'instructionles [reg]|[mem],dword [mem]|[reg]. Ils peuvent référencer jusqu'à 1024 Ko de mémoire. Notez que l'arithmétique du pointeur (addition et soustraction) ne modifie pas la partie segment du pointeur, seulement son décalage. Les opérations qui dépassent les limites de zéro ou 65535 (0xFFFF) subiront une opération modulo 64K comme toute opération normale 16 bits. Par exemple, si le registre de segment est défini sur 0x5000 et que le décalage est incrémenté, au moment où ce décalage de compteur devient (0x10000), l'adresse absolue résultante passera à 0x5000:0000.
les bx , dword [ reg ] mov ax , word [ es : bx ] mov dx , word [ es : bx + 2 ]
  • Les pointeurs géants sont essentiellement des pointeurs lointains, mais sont (la plupart du temps) normalisés à chaque fois qu'ils sont modifiés afin qu'ils aient le segment le plus élevé possible pour cette adresse. C'est très lent mais permet au pointeur de pointer vers plusieurs segments et permet des comparaisons de pointeurs précises, comme si la plateforme était un modèle de mémoire plate : cela interdit l'aliasing de la mémoire comme décrit ci-dessus, donc deux pointeurs géants qui référencent le même emplacement mémoire sont toujours égaux.
les bx , dword [ reg ] mov ax , word [ es : bx ] ajouter bx , 2 tester bx , 0xfff0 jz lbl sous bx , 0x10 mov dx , es inc dx mov es , dx lbl: mov dx , word [ es : bx ]

Modèles de mémoire

Les modèles de mémoire sont :

Autres plateformes

En mode protégé, un segment ne peut pas être à la fois accessible en écriture et exécutable. Par conséquent, lors de la mise en œuvre du modèle de mémoire Tiny, le registre de segment de code doit pointer vers la même adresse physique et avoir la même limite que le registre de segment de données. Cela contrecarre l'une des fonctionnalités du 80286 , qui garantit que les segments de données ne sont jamais exécutables et que les segments de code ne sont jamais accessibles en écriture (ce qui signifie que le code auto-modifiable n'est jamais autorisé). Cependant, sur le 80386, avec son unité de gestion de mémoire paginée, il est possible de protéger les pages de mémoire individuelles contre l'écriture.

Les modèles de mémoire ne se limitent pas aux programmes 16 bits. Il est également possible d'utiliser la segmentation en mode protégé 32 bits (ce qui donne lieu à des pointeurs 48 bits) et il existe des compilateurs en langage C qui prennent en charge cette fonction. Cependant, la segmentation en mode 32 bits ne permet pas d'accéder à un espace d'adressage plus grand que celui que couvrirait un seul segment, à moins que certains segments ne soient pas toujours présents en mémoire et que l'espace d'adressage linéaire ne soit utilisé que comme cache sur un espace virtuel segmenté plus grand.

x86-64

Sur la plateforme x86-64 , il existe au total sept modèles de mémoire, car la majorité des références de symboles ne font que 32 bits de large et les adresses sont connues au moment de la liaison (contrairement au code indépendant de la position ). Cela n'affecte pas les pointeurs utilisés, qui sont toujours des pointeurs plats de 64 bits, mais uniquement la manière dont les valeurs auxquelles il faut accéder via des symboles peuvent être placées.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index