- •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.4.2 Регистры сегментов
- •3.4.2.1 Регистры сегментов в 64-битном режиме
- •3.4.3.1 Флаги состояния
- •3.4.3.2 Флаг df
- •3.4.3.3 Системные флаги и поле iopl
- •3.7.2 Операнды регистров
- •3.7.5. Определение смещения
- •3.7.5.1 Определение смещения в 64-битном режиме
- •3.7.6 Режимы адресации ассемблера и компилятора
- •3.7.7 Адресация портов ввода / вывода
3.3.2 Пейджинг и виртуальная память
С моделью с плоской или сегментированной памятью линейное адресное пространство отображается в физическое адресное пространство процессора либо напрямую, либо через пейджинг. При использовании прямого сопоставления (пейджинг отключен) каждый линейный адрес имеет взаимно однозначное соответствие физическому адресу. Линейные адреса отправляются на адресные строки процессора без перевода.
При использовании пейджингового механизма архитектуры IA-32 (с поддержкой пейджинга) линейное адресное пространство делится на страницы, которые сопоставляются с виртуальной памятью. Затем страницы виртуальной памяти отображаются в физической памяти. Когда операционная система или исполнитель использует пейджинг, механизм поискового вызова прозрачен для прикладной программы. Все, что видит приложение, - это линейное адресное пространство.
Кроме того, механизм поискового вызова архитектуры IA-32 включает в себя расширения, которые поддерживают:
• Расширения физических адресов (PAE) для адресации физического адресного пространства более 4 ГБ.
• Расширения размера страницы (PSE) для отображения линейного адреса на физический адрес на 4-мегабайтных страницах.
См. Также: Глава 3 «Управление памятью с защищенным режимом» в программном обеспечении Intel® 64 и IA-32
Руководство разработчика, том 3A.
3.3.3 Организация памяти в 64-битном режиме
Архитектура Intel 64 поддерживает физическое адресное пространство более 64 ГБ; фактический размер физического адреса процессоров IA-32 специфичен для реализации. В 64-битном режиме имеется архитектурная поддержка для 64-битного линейного адресного пространства. Однако процессоры, поддерживающие архитектуру Intel 64, могут реализовывать менее 64 бит (см. Раздел 3.3.7.1). Линейное адресное пространство отображается в физическое адресное пространство процессора через механизм поискового вызова PAE.
3.3.4. Режимы работы против модели памяти
При написании кода для процессора IA-32 или Intel 64 программист должен знать режим работы, в котором процессор будет работать при выполнении кода и используемой модели памяти. Связь между режимами работы и моделями памяти выглядит следующим образом:
• Защищенный режим. В защищенном режиме процессор может использовать любую из моделей памяти, описанных в этом разделе. (Модель памяти режима реальной адресации обычно используется только тогда, когда процессор находится в режиме виртуального 8086.) Используемая модель памяти зависит от дизайна операционной системы или исполнительной власти. Когда многозадачность реализована, отдельные задачи могут использовать разные модели памяти.
• Режим реального адреса - в режиме реального адреса процессор поддерживает только модель памяти режима реального времени.
• Режим управления системой. Когда в SMM процессор переключается на отдельное адресное пространство, называемое ОЗУ управления системой (SMRAM). Модель памяти, используемая для адреса байтов в этом адресном пространстве, похожа на модель режима реального адреса. Для получения дополнительной информации о модели памяти, используемой в SMM, см. Главу 34 «Режим управления системой» в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, том 3C.
• Режим совместимости. Программное обеспечение, которое необходимо запустить в режиме совместимости, должно соответствовать той же модели памяти, что и для 32-разрядного защищенного режима. Эффект сегментации такой же, как и в семантике защищенного режима в 32 бит.
• 64-разрядный режим. Сегментация обычно (но не полностью) отключена, создавая плоское 64-битное линейно-адресное пространство. В частности, процессор обрабатывает базу сегментов CS, DS, ES и SS как ноль в 64-битном режиме (это делает линейный адрес равным эффективному адресу). Сегментированные и реальные режимы адреса недоступны в 64-битном режиме.
3.3.5 32-разрядные и 16-битные адреса и операнды
Процессоры IA-32 в защищенном режиме могут быть настроены для 32-разрядных или 16-разрядных адресов и размеров операндов. При 32-битных размерах адреса и операнда максимальный линейный адрес или смещение сегмента - FFFFFFFFH (232-1); размеры операндов обычно равны 8 бит или 32 бита. С 16-разрядными размерами адресов и операндов максимальный линейный адрес или смещение сегмента - FFFFH (216-1); размеры операндов обычно составляют 8 бит или 16 бит.
При использовании 32-разрядной адресации логический адрес (или дальний указатель) состоит из 16-битного сегмента селектора и 32-битного смещения; при использовании 16-разрядной адресации адрес состоит из 16-битного сегмента селектора и 16-битного смещения.
Префиксы инструкций допускают временные переопределения адресов и / или операндов по умолчанию из программы.
При работе в защищенном режиме дескриптор сегмента для текущего исполняемого сегмента кода определяет адрес по умолчанию и размер операнда. Дескриптор сегмента - это системная структура данных, которая не отображается в коде приложения. Ассемблерные директивы позволяют выбирать адресацию по умолчанию и размер операнда для программы. Затем ассемблер и другие инструменты настроили дескриптор сегмента для сегмента кода соответствующим образом.
При работе в режиме реального адреса размер адреса и размер операнда по умолчанию составляет 16 бит. В режиме реального адреса можно использовать переопределение размера адреса, чтобы включить 32-разрядную адресацию. Однако максимально допустимый 32-битный линейный адрес по-прежнему 000FFFFFH (220-1).
