- •6. Модель прикладного выполнения в системной среде Intel®Itanium™
- •6.1. Режимы набора инструкций
- •6.1.1. Выполнение набора инструкций в среде IntelItanium.
- •6.1.2. Выполнение набора инструкций ia-32
- •6.1.3. Переключения наборов инструкций
- •6.1.3.1. Инструкция jmpe
- •6.1.3.2. Инструкция перехода к ia
- •6.1.4. Переключения режимов работы ia-32
- •6.2. Модель состояния прикладных регистров ia-32
- •6.2.1. Регистры общего назначения ia-32
- •6.2.2. Указатель инструкций ia-32
- •6.2.3. Сегментные регистры ia-32
- •6.2.3.1. Сегменты данных и кода
- •6.2.3.2. Сегментный дескриптор и целостность среды
- •6.2.3.2.1. Защищенный режим.
- •6.2.3.2.2 Режим vm86
- •6.2.3.2.2 Реальный режим
- •6.2.3.3. Проверки целостности среды ia-32 во время выполнения
- •6.2.4. Прикладной ia-32 регистрEflag
- •6.2.5. Ia-32 регистры с плавающей точкой
- •6.2.5.1. Ia-32 стек регистров с плавающей точкой
- •6.2.5.2. Специальные случаи
- •6.2.5.3. Регистры управления с плавающей точкой ia-32.
- •6.2.5.4. Ia-32 среда с плавающей точкой
- •6.2.6. Ia-32 регистры ммх технологии
- •6.2.7. Ia-32 регистрыSse
- •6.3. Обзор моделей памяти
- •6.3.1. Упорядочивание памяти
- •6.3.2. Сегментация ia-32
- •6.3.3. Самомодифицирующийся код
- •6.3.4. Взаимодействия упорядочивания памяти.
- •6.4. Использование кодом ia-32, регистров Itanium
- •6.4.1. Механизм стека регистров
- •6.4.2. Alat
- •6.4.3. Влияние NaT/NaTValна инструкцииIa-32
6.2.7. Ia-32 регистрыSse
Восемь 128-битных регистров SSE(ХММ0-7) отображаются в шестнадцати физических регистрах Itanium с плавающей точкойFR16-FR31, попарно. Младшие 64 бита ХХМ0 отображаются наFR16{63:0}, а старшие 64 бита ХХМ0 отображаются наFR17{63:0}.
81 |
80 |
64 |
63 |
0 |
|
0 |
0x1003E |
XММ0-7{127:64} |
FR17-FR31, нечетные | ||
81 |
80 |
64 |
63 |
0 |
|
0 |
0x1003E |
XММ0-7{63:0} |
FR17-FR31, четные |
Рис. 6.13. SSEрегистры (XMМ0 доXММ7)
Когда значение записывается в SSEрегистр с помощьюIA-32 инструкцийSSE:
Поле порядка соответствующего регистрах Itanium с плавающей точкой (биты 80-64) устанавливается в 0x1003E, а бит знака устанавливается в 0.
Мантисса (биты 63-0) устанавливается в значение ХММ данных, в биты {63:0} для четных регистров и в биты {127:64} для нечетных регистров.
Когда SSEрегистр читается с помощьюIA-32 инструкцийSSE:
Поле порядка соответствующего Itanium регистра с плавающей точкой (биты 80-64) и знаковый бит (бит 81) игнорируются, включая любые коды NaTVal.
6.3. Обзор моделей памяти
Виртуальные адреса в наборах инструкций Itanium или IA-32 определены для адресации одних и тех же мест памяти. Инструкции Itanium прямо генерируют 64-битные виртуальные адреса. ИнструкцииIA-32 генерируют 16-ти или 32-битные эффективные адреса, которые затем преобразуются в 32-битные виртуальные адреса, с помощьюIA-32 сегментации. Далее, 32-битные виртуальные адреса преобразуются в 64-битные виртуальные адреса, путем расширения нулями до 64 бит. Расширение нулями размещает всеIA-32 обращения к памяти в младших 4G-байтах 64 битного виртуального адресного пространства, в пределах виртуального региона 0. Виртуальные адреса сгенерированные любым набором инструкций переводятся затем в физические адреса, используя механизмы управления памятью описанные в главе 4 «Адресация и защита» во втором томе.
|
16/32-битный эффективный адрес |
|
32-битный виртуальный адрес |
|
64-битный виртуальный адрес | ||||||||||||
|
База |
Сегментация |
Расширение нулями |
| |||||||||||||
IA-32 |
Индекс |
+ |
|
|
| ||||||||||||
|
Смещение |
|
|
| |||||||||||||
Архитектура |
База |
|
|
|
|
|
|
| |||||||||
Intel Itanium |
|
|
|
|
|
|
Рис. 6.14. Модель адресации памяти
6.3.1. Упорядочивание памяти
Целочисленные типы данных памяти и типы данных с плавающей точкой (IEEE) являются двоично-совместимыми между наборами инструкцийIA-32 и Itanium. Приложения и операционные системы типа Itanium, которые взаимодействуют с кодомIA-32, должны использовать обращения упорядоченные «по убыванию», чтобы гарантировать, что форматы данных будут теми же самыми. ВсеIA-32 данные инструкций и обращения к памяти инструкций принудительно являются упорядоченными «по убыванию».
6.3.2. Сегментация ia-32
Сегментация не используется для обращений к памяти набора инструкций Itanium. Сегментация, выполняемая при обращении к памяти набора инструкций IA-32, основывается на состоянииEFLAG.vmиCFLG.pe. Правила сегментации реального, защищенного иVM86 режимов, следуют спецификациям, заданным вIntel Architecture Software Developer's Manual:
Эффективный адрес 16/32-битных данных IA-32: 16- или 32-битные эффективные адреса генерируются на основании битовCSD.d,SSD.bи переопределений префиксов, с помощью сложения базового регистра, масштабированного индексного регистра и 16/32-битного значения смещения. Начало эффективного адреса (первый байт многобайтного операнда) превышающего 16 или 32 бита, усекается до 16 или 32 битов. Окончание (последний байт многобайтного операнда) 16-битного эффективного адреса может простираться за 64К-байтную границу, однако окончание 32-битного эффективного адреса усекается до 32 бит и не может простираться за 4G-байтную границу эффективного адреса. Полная детализация условий свертки дается вIntel Architecture Software Developer's Manual.
Эффективный адрес 16/32-битного кода IA-32: 16- или 32-битныйEIPосновывающийся наCSD.d, используется как эффективный адрес. Начальное значениеEIP(первый байт многобайтной инструкции) превышающего 16 или 32 бита, усекается до 16 или 32 битов. Окончание (последний байт многобайтной инструкции) 16-битного эффективного адреса может простираться за 64К-байтную границу, однако окончание 32-битного значенияEIPусекается до 32 бит и не может простираться за 4G-байтную границу эффективного адреса.
Генерация 32-битного виртуального адреса IA-32: Результирующий 16- или 32-битный эффективный адрес отображается в 32-битное виртуальное адресное пространство, путем прибавления базы сегмента. Полные проверки границы и защиты сегмента проводятся так, как это задано вIntel Architecture Software Developer's Manual, а дополнительные проверки так, как задано в этом разделе.
Генерация 64-битного адреса IA-32: Результирующий 32-битный виртуальный адрес преобразуется в 64-битный виртуальный адрес путем расширения нулями до 64 бит, при этом все обращения к памяти набора инструкцийIA-32 оказываются в первых 4Gбайтах 64-битного виртуального адресного пространства, внутри виртуального региона 0.
Если код IA-32 использует плоскую сегментированную модель (начала всех сегментов установлены в 0), то коды типа Itanium или типаIA-32 могут свободно обмениваться указателями, после того как указатель будет расширен нулями до 64 бит. Для сегментированного кодаIA-32, указатели эффективного адреса должны быть прежде преобразованы в виртуальный адрес до того, как они будут совместно использоваться кодом типа Itanium.