Что такое эффективный адрес
Перейти к содержимому

Что такое эффективный адрес

  • автор:

13) Эффективный адрес и преобразование адресов.

Три адресных пространства: логическое, линейное и физическое. По сочетанию сегментации и страничной трансляции различают две модели памяти: 1.В сегментной модели памяти приложение использует несколько сегментов памяти (для кода, данных, стека). В этой модели приложение оперирует логическими адресами. 2. В плоской модели памяти приложению для всех целей выделяется единственный сегмент. В этой модели приложение оперирует линейными адресами.

Логический адрес состоит из селектора сегмента Seg и эффективного адреса, называемого также смещением (offset). Логический адрес обозначается в форме Seg:Offset. Селектор сегмента хранится в старших 14 битах сегментного регистра (CS, DS, ES, SS, FS или GS), участвующего в адресации конкретного элемента памяти.Преобразование логического адреса в физический для 32-битных процессоров.

Физический адрес памяти образуется после преобразования линейного адреса блоком страничной трансляции адресов.

Блок страничной трансляции адресов позволяет использовать разрядность физического адреса, отличную от разрядности линейного адреса. В процессорах различных моделей соотношения разрядностей менялись: 1. В 386SX при 32-битном линейном адресе физический был 24-битным (до 16 Мбайт физически адресуемой памяти). 2. В большинстве 32-битных процессоров до 6-го поколения использовался 32-битный физический адрес (до 4 Гбайт физически адресуемой памяти). Формирование адреса памяти процессоров с 64-битным расширением рисунок.

14) Страничная трансляция адресов и виртуальная память

СТА.Механизм сегментации обеспечивает превосходную защиту, но он не очень удобен для реализации виртуальной памяти (подкачки). В дескрипторе сегмента есть бит присутствия, по нему процессор определяет, находится ли данный сегмент в физической памяти или он находится на внешнем запоминающем устройстве (на винчестере). В последнем случае генерируется исключение #11, обработчик которого может подгрузить сегмент в память. Неудобство заключается в том, что различные сегменты могут иметь различную длину. Этого можно избежать, если механизм подкачки реализовывать на основе страничного преобразования. Особенностью этого преобразования является то, что процессор в этом случае оперирует с блоками физической памяти равной длины (4Кбайт) — страницами. Страницы не имеют непосредственного отношения к логической структуре программы.Страничное преобразование действует только в защищенном режиме и включается установкой в 1 бита PG в регистре CR0.

Под виртуализацией памяти понимается метод автоматического управления иерархической памятью. По своей сути виртуализация памяти представляет способ аппаратной и программной реализации концепции иерархической памяти. В рамках идеи виртуализации памяти ОП рассматривается как линейное пространство N адресов, называемое физическим пространством (ФП) памяти. Для задач, где требуется более чем N ячеек, предоставляется значительно большее пространство адресов (обычно равное общей емкости всех видов памяти), называемое виртуальным пространством (ВП).

Страничная организация виртуальной памяти

Страничная организация памяти служит целям преобразования виртуальных адресов в физические. Программа разбивается на части равной величины, называемые страницами. Размер страницы обычно выбирают в пределах 4 – 8 Кбайт (должен быть кратен емкости одного сектора магнитного диска). Виртуальное и физическое адресные пространства разбиваются на блоки размером в страницу. Блок ОП, соответствующий странице, часто называют страничным кадром или фреймом (page frame). Страницам виртуальной и физической памяти присваивают номера.

Кафедра “Программное Обеспечение”

x

Вход в систему

    Asmportal
  • -Теория
    • Лекции по курсу «ПАКМ»
  • +Лабораторные и курсовые работы
    • Задания на лабораторные работы
    • Задания на курсовые работы
    • Формирование отчета
    • Загрузить файл на сервер
    • Файлы
  • +Инструменты
    • В linux
  • +Литература
  • +О проекте

[В печать]

11 мая 2009

Лекции по курсу «Проектирование ассемблеров, компоновщиков, макропроцессоров

8. Адресация операндов

Есть команды, и есть операнды. Операнд – тот объект, над которым будет производиться операция. В команде мы указываем адрес.

При регистровой адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме SP и ВР (это специальные регистры для работы с сегментом стека).

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

При косвенной адресации в самой команде может находиться лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах, на которые указывает своим cодержимым байт mod r/m. Квадратные скобки — признак косвенной адресации.

При непосредственной адресации эффективный адрес является частью машинной команды, но формируется этот адрес только из значения поля смещения в команде. Для формирования физического адреса операнда в памяти процессор складывает это поле со сдвинутым на четыре бита значением сегментного регистра.

Смешанная адресация представляет собой совокупность прямой и косвенной адресаций.

Эффективный адрес (EA) применим к прямой, косвенной и смешанной адресациям.

В четвертом случае EA будет равен bx + si + x (смещение, вычисленное в байтах от начала некоторого сегмента).

Сегментация (добавление содержимого сегментного регистра к эффективному адресу) применяется процессором автоматически при:

    вычислении адреса команды;

Эффективный адрес

В большинстве вычислительных систем эффективным адресом называется адрес, по которому с точки зрения программиста происходит обращение к памяти; численно он совпадает с виртуальным адресом, причём последний термин используется значительно чаще. Однако в случае архитектуры IA-32 ситуация несколько сложнее. Здесь эффективным адресом называется смещение, то есть один из двух компонентов логического адреса. Другой компонент — селектор сегмента — в состав эффективного адреса не входит и автоматически учитывается процессором при преобразовании логического в линейный адрес и далее в физический адрес. Таким образом, технически эффективный адрес является лишь одним из компонентов адреса, по которому происходит обращение к памяти с точки зрения программы. Однако во всех популярных операционных системах для платформы IA-32, включая Windows и Linux, механизм сегментации используется в минимально необходимой степени, и программы работают в плоском адресном пространстве, манипулируя лишь смещениями, но не селекторами сегментов. В результате можно считать, что эффективный и виртуальный адреса являются эквивалентными (например, говоря о передаче адресов при системных вызовах, документация Microsoft использует термин «виртуальный адрес», однако технически передаётся именно смещение, т.е. значение эффективного адреса, а не полный логический адрес).

Эффективный адрес в общем случае является суммой базового адреса, находящегося в базовом регистре, индекса из индексного регистра и отклонения (displacement), являющегося константой, заданной в команде, например:

mov ax, 1234h [bx+si] ; Загрузка слова по эффективному адресу 1234h + BX + SI

В этом примере 1234h является отклонением, регистр BX содержит базовый адрес, а SI — индекс.

Любой из компонентов эффективного адреса может отсутствовать, однако хотя бы один из них должен быть указан. При 16-разрядной адресации в качестве базового регистра могут использоваться только BX и BP, а в качестве индексного — только SI и DI. Отклонение имеет длину 8 или 16 бит и рассматривается как число со знаком. Таким образом, возможны восемь комбинаций регистров, не считая прямой адресации, при которой регистры при вычислении эффективного адреса не используются, и его значение равно отклонению. Если в качестве базового задан регистр BP, то операнд по умолчанию находится в сегменте стека (совместно с эффективным адресом используется сегментный регистр SS), а если базовый регистр не задан или им является BX, то по умолчанию операнд находится в сегменте данных (используется сегментный регистр DS). В любом случае используемый сегмент может быть переопределён с помощью префикса замены сегмента.

При 32-разрядной адресации эффективный адрес также является суммой базового адреса, индекса и отклонения, однако в роли базового регистра может выступать любой регистр общего назначения, а в роли индексного — любой, кроме ESP, причём и базовым, и индексным может быть один и тот же регистр. Кроме того, значение индекса может масштабироваться (автоматически умножаться на 2, 4 или 8), что облегчает адресацию в массивах с элементами указанных размеров. Отклонение является 8- или 32-разрядной величиной со знаком. Примеры такой адресации:

mov eax, [1234h] ; Загрузка двойного слова из ячейки с эффективным адресом 1234h mov eax, 1234h [ecx] ; Загрузка из ячейки с эффективным адресом 1234h + ECX mov eax, [ebx+4*edx] ; Загрузка из ячейки с эффективным адресом EBX + 4*EDX

При 64-разрядной адресации эффективный адрес формируется в целом аналогично, однако есть и некоторые особенности:

  • используются не 32-, а 64-разрядные регистры;
  • с помощью префикса REX при формировании эффективного адреса можно в роли базового и индексного использовать новые регистры R8-R15;
  • отклонение является 8- или 32-разрядной величиной, рассматриваемой как число со знаком. 64-разрядного отклонения не предусмотрено;
  • отсутствует возможность адресации памяти только с помощью отклонения (обязательно наличие базового и/или индексного регистра). Исключением является команда MOV, у которой имеются формы, использующие прямую 64-разрядную адресацию памяти;
  • появилась возможность адресации относительно указателя инструкции RIP. В этом случае эффективный адрес равен сумме 64-разрядного адреса следующей команды и 32-разрядного смещения, рассматриваемого как число со знаком;
  • сегментные регистры FS и GS могут использоваться в качестве дополнительных базовых регистров (подробнее об этом написано в разделе

Как вычисляется эффективный адрес относительно счетчика команд?

633c54d63d33d695488518.png

Подскажите как разобраться с вычислением эффективного адреса относительно регистра RIP в x86-64.
В книге описан пример, но никак не могу понять его

Если правильно понял то младшие 32 бита в команде это смещение которое складывается с адресом RIP, но я никак не могу понять откуда появился результат после сложения? . А0СС90

И что это за значение 88 13 00 00 . и Val = 5000 ?

Объясните в общем как что с чем соотносится, никак не могу разобраться

  • Вопрос задан более года назад
  • 63 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *