stringtranslate.com

модели памяти x86

В вычислительной технике модели памяти x86 представляют собой набор из шести различных моделей памяти процессора x86 , работающих в реальном режиме , которые управляют использованием сегментных регистров и размером указателей по умолчанию.

Сегментация памяти

Четыре регистра используются для ссылки на четыре сегмента в 16-битной архитектуре сегментированной памяти x86. DS ( сегмент данных ), CS ( сегмент кода ), SS ( сегмент стека ) и ES (дополнительный сегмент). Другой 16-битный регистр может действовать как смещение в заданном сегменте, и поэтому логический адрес на этой платформе записывается как сегмент : смещение , обычно в шестнадцатеричной системе счисления. В реальном режиме для вычисления физического адреса байта памяти оборудование сдвигает содержимое соответствующего сегментного регистра на 4 бита влево (фактически умножая на 16), а затем добавляет смещение.

Например, логический адрес 7522:F139 дает 20-битный физический адрес:

Обратите внимание, что этот процесс приводит к алиасингу памяти, так что любой заданный физический адрес имеет до 4096 соответствующих логических адресов. Это усложняет сравнение указателей на различные сегменты.

Размеры указателя

Форматы указателя известны как «ближний» , «дальний » и «огромный» .

 mov bx , слово [ reg ] mov ax , слово [ bx ] mov dx , слово [ bx + 2 ]           
 les bx , dword [ reg ] mov ax , word [ es : bx ] mov dx , word [ es : bx + 2 ]        
 les bx , dword [ reg ] mov ax , word [ es : bx ] add bx , 2 test bx , 0xfff0 jz lbl sub bx , 0x10 mov dx , es inc dx mov es , dx lbl: mov dx , word [ es : bx ]                       

Модели памяти

Модели памяти:

Другие платформы

В защищенном режиме сегмент не может быть одновременно записываемым и исполняемым. [2] [3] Поэтому при реализации модели памяти Tiny регистр сегмента кода должен указывать на тот же физический адрес и иметь тот же предел, что и регистр сегмента данных. Это нарушало одну из особенностей 80286 , которая гарантирует, что сегменты данных никогда не будут исполняемыми, а сегменты кода никогда не будут записываемыми (что означает, что самомодифицирующийся код никогда не допускается). Однако на 80386 с его блоком управления страничной памятью можно защитить отдельные страницы памяти от записи. [4] [5]

Модели памяти не ограничиваются 16-битными программами. Возможно использовать сегментацию и в 32-битном защищенном режиме (что приводит к 48-битным указателям), и существуют компиляторы языка C, которые это поддерживают. [6] Однако сегментация в 32-битном режиме не позволяет получить доступ к большему адресному пространству, чем то, что покрывает один сегмент, если только некоторые сегменты не всегда присутствуют в памяти, а линейное адресное пространство просто используется как кэш поверх большего сегментированного виртуального пространства. [ необходима цитата ]

x86-64

На платформе x86-64 существует всего семь моделей памяти, [7] поскольку большинство ссылок на символы имеют ширину всего 32 бита, и если адреса известны во время компоновки (в отличие от позиционно-независимого кода ). Это не влияет на используемые указатели, которые всегда являются плоскими 64-битными указателями, а только на то, как могут быть размещены значения, к которым должен быть получен доступ через символы.

Смотрите также

Библиография

Ссылки

  1. ^ «Набор инструкций Intel — LES» . Страницы набора инструкций Intel . Стамбульский технологический университет/ Intel . Проверено 19 октября 2015 г.
  2. ^ "Руководство разработчика архитектур Intel 64 и IA-32: том 3A". Intel. стр. 3–17 . Получено 13 сентября 2011 г.
  3. ^ "Руководство программиста по архитектуре AMD64, том 2: системное программирование" (PDF) . AMD. стр. 82–84 . Получено 13 сентября 2011 г. .
  4. ^ "Руководство разработчика архитектур Intel 64 и IA-32: Том 3A". Intel. стр. 4–41 . Получено 13 сентября 2011 г.
  5. ^ "Руководство программиста по архитектуре AMD64, том 2: системное программирование" (PDF) . AMD. стр. 139 . Получено 13 сентября 2011 г. .
  6. ^ "Open Watcom C Language Reference version 2" (PDF) . github.com/open-watcom . Open Watcom . Получено 10 января 2018 г. .
  7. ^ «Двоичный интерфейс приложений System V, Дополнение к архитектуре процессора AMD64, черновая версия 0.99.7» (PDF) . стр. 33–35.