- •3.3. Организация памяти
- •3.3.1 Модели памяти ia-32
- •3.3.2 Пейджинг и виртуальная память
- •3.3.3 Организация памяти в 64-битном режиме
- •3.3.4. Режимы работы против модели памяти
- •3.3.6 Расширенная физическая адресация в защищенном режиме
- •3.3.7 Расчет адресов в 64-битном режиме
- •3.3.7.1 Каноническая адресация
- •3.4 Основные регистры выполнения программы
- •3.4.1 Регистры общего назначения
- •3.4.1.1 Регистры общего назначения в 64-битном режиме
3.3.6 Расширенная физическая адресация в защищенном режиме
Начиная с процессоров семейства P6, архитектура IA-32 поддерживает адресацию физической памяти до 64 Гбайт (236 байт). Программа или задача не могли напрямую адресовать адреса в этом адресном пространстве. Вместо этого он обращается к отдельным линейным адресным пространствам до 4 ГБ, которые сопоставляются с физическим адресным пространством на 64 Гбайт через механизм управления виртуальной памятью. Используя этот механизм, операционная система может включить программу для переключения линейных адресных пространств 4-гигабайта в физическое адресное пространство 64 ГБ.
Использование расширенной физической адресации требует, чтобы процессор работал в защищенном режиме, а операционная система обеспечивала систему управления виртуальной памятью. См. «36-битная физическая адресация с использованием механизма подкачки PAE» в главе 3 «Управление памятью с защищенным режимом» в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, том 3A.
3.3.7 Расчет адресов в 64-битном режиме
В большинстве случаев 64-разрядный режим использует плоское адресное пространство для кода, данных и стеков. В 64-битном режиме (при отсутствии переопределения размера адреса) размер эффективных вычислений адресов составляет 64 бита. Расчет эффективного адреса использует 64-разрядные базовые и индексные регистры и смещения с расширением знака до 64 бит.
В плоском адресном пространстве 64-битного режима линейные адреса равны эффективным адресам, так как базовый адрес равен нулю. Если сегменты FS или GS используются с ненулевой базой, это правило не выполняется. В 64-битном режиме добавляются эффективные компоненты адреса, а эффективный адрес усекается (см., Например, инструкцию LEA) перед добавлением полной базы 64-битного сегмента. База никогда не усекается, независимо от режима адресации в 64-битном режиме.
Указатель команд расширяется до 64 бит для поддержки смещения 64-битного кода. 64-разрядный указатель инструкции называется RIP. В таблице 3-1 показана взаимосвязь между RIP, EIP и IP.
Таблица 3-1. Размеры указателя команд
|
Биты 63:32 |
Биты 31:16 |
Биты 15:0 |
|
16-битный указатель команд |
Не изменено |
IP |
||
32-битный указатель команд |
Нулевое расширение |
EIP |
||
64-битный указатель команд |
RIP |
|||
Как правило, перемещения и немедленные действия в 64-битном режиме не распространяются на 64 бита. Они по-прежнему ограничены 32 битами и расширенными знаками при вычислении эффективных адресов. Однако в 64-битном режиме поддерживается поддержка 64-битного смещения и немедленных форм инструкции MOV.
Все 16-битные и 32-разрядные вычисления адресов в режиме IA-32e с нулевым расширением для формирования 64-разрядных адресов. Вычисления адресов сначала усекаются до эффективного размера адреса текущего режима (режим 64-бит или режим совместимости), как переопределенный любым префиксом размера адреса. Затем результат будет равен нулю - до полной ширины 64-битного адреса. Из-за этого 16-разрядные и 32-разрядные приложения, работающие в режиме совместимости, могут получить доступ только к низким 4 ГБ эффективных адресов с 64-битным режимом. Аналогично, 32-разрядный адрес, сгенерированный в 64-битном режиме, может получить доступ только к низким 4 ГБ эффективных адресов 64-битного режима.
