- •6. Модель прикладного выполнения в системной среде Intel® Itanium™
- •6.1. Режимы набора инструкций
- •6.1.1. Выполнение набора инструкций в среде Intel Itanium.
- •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.2. Специальные случаи
- •6.2.5.3. Регистры управления с плавающей точкой ia-32.
- •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.3. Влияние NaT/NaTVal на инструкции ia-32
6.2. Модель состояния прикладных регистров ia-32
Как показано на рис. 6.3 и в табл. 6.1, универсальные регистры IA-32, селекторы сегментов и дескрипторы сегментов отображаются в младших 32 битах универсальных регистров Itanium, от GR8 до GR31. Стек регистров с плавающей точкой, ММХ регистры и SSE регистры отображаются в Itanium регистрах с плавающей точкой от FR8 до FR31. Заливкой выделены разные условные типы (подробнее описанные далее): желтый – тип IA-32 и общий тип, серый – тип undef, белый – тип unmod и регистры, содержащие константы.
Для содействия непосредственной передаче параметра, типы данных памяти, типы данных целочисленных регистров и регистров с плавающей точкой, являются двоично-совместимыми между наборами инструкций IA-32 и Itanium.
Некоторые Itanium регистры аппаратно изменены в неопределенное состояние, как побочный эффект процесса выполнения набора инструкций IA-32, что отмечено в табл. 6.1 и на рис. 6.2. Вообще состояние Itanium системы не влияет на выполнение набора инструкций IA-32. Код типа Itanium может обращаться ко всем регистрам (включая IA-32), в то время как обращения набора инструкций IA-32 ограничены видимым состоянием прикладных регистров IA-32.
Регистрам назначены следующие условные типы на период переходов между наборами инструкций IA-32 и Itanium.
IA-32. Такой регистр содержит, в течение выполнения набора инструкций IA-32, некоторый регистр IA-32. Ожидаемые значения IA-32 должны быть загружены перед переключением в набор инструкций IA-32. После завершения инструкций IA-32, эти регистры содержат результаты выполнения инструкций IA-32. Эти регистры могут содержать произвольное значение в течение выполнения инструкции Itanium, согласно программным соглашениям Itanium. Для этих регистров, программное обеспечение должно следовать соглашениям о вызовах IA-32 и Itanium.
НАБОР ПРИКЛАДНЫХ РЕГИСТРОВ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General register
|
Branch register
CPU Identifiers
|
FP register P
|
Predicate
|
Application registers
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Рис. 6.3. Модель прикладных регистров IA-32
Неопределенный (undef). Регистр, отмеченный как неопределенный, может быть использован в качестве рабочей области при выполнении процессором инструкций IA-32 и не гарантирует сохранение состояния при переключении набора инструкций.
Общий. Общие регистры содержат значения, которые имеют подобные функциональные возможности в любой системе команд. Например, указатель стека (ESP) и указатель инструкций (IP) являются общими.
Не изменяемый (unmod). Этот регистр не изменяется при выполнении IA-32. Код типа может полагаться на эти значения не изменяемые в процессе выполнения набора инструкций IA-32. Регистр будет иметь одно и то же значение, что при входе в набор инструкций IA-32, то и при выходе из набора инструкций IA-32.
Табл. 6.1. Схема распределения прикладных регистров IA-32
Itanium регистр |
IA-32 регистр |
Тип |
Размер |
Описание |
Целочисленные регистры общего назначения |
||||
GR0 |
|
|
|
Содержит 0 |
GR1-3 |
|
undef F |
|
Рабочие при выполнении IA-32 |
GR4-7 |
|
unmod |
|
Сохраняемые регистры Itanium |
GR8 |
EAX |
IA-32 |
32A |
Регистры IA-32 общего назначения |
GR9 |
ECX |
|||
GR10 |
EDX |
|||
GR11 |
EBX |
|||
GR12 |
ESP |
|||
GR13 |
EBP |
|||
GR14 |
ESI |
|||
GR15 |
EDI |
|||
GR16{15:0} |
DS |
64 |
Селекторы IA-32 |
|
GR16{31:16} |
ES |
|||
GR16{47:32} |
FS |
|||
GR16{63:48} |
GS |
|||
GR17{15:0} |
CS |
|||
GR17{31:16} |
SS |
|||
GR17{47:32} |
LDT |
|||
GR17{63:48} |
TSS |
|||
GR18-23 |
|
undef F |
|
Рабочие при выполнении IA-32 |
GR24 |
ESD |
IA-32 |
64 |
Дескрипторы сегментов IA-32 (регистровый формат)B |
GR25-26 |
|
undef F |
|
Рабочие при выполнении IA-32 |
GR27 |
DSD |
IA-32 |
64 |
Дескрипторы сегментов IA-32 (регистровый формат)B |
GR28 |
FSD |
|||
GR29 |
GSD |
|||
GR30 |
LDTDC |
|||
GR31 |
GDTD |
|||
GR32-127 |
|
undef D |
|
Пустые, при выполнении кода IA-32 |
Среда процесса |
||||
IP |
IP |
общий |
64 |
Указатель инструкций, общий для IA-32 и Itanium |
Регистры с плавающей точкой |
||||
FR0 |
|
|
|
Содержит +0.0 |
FR1 |
|
|
|
Содержит +1.0 |
FR2-5 |
|
unmod |
|
Сохраняемые регистры Itanium |
FR6-7 |
|
undef |
|
Пустые, при выполнении кода IA-32 |
FR8 |
MM0/FP0 |
IA-32 |
64/80 |
IA-32 регистры MMX технологии (совмещены с 64-битной FP мантиссой) IA-32 регистры с плавающей точкой (отображение физических регистров) E |
FR9 |
MM1/FP1 |
|||
FR10 |
MM2/FP2 |
|||
FR11 |
MM3/FP3 |
|||
FR12 |
MM4/FP4 |
|||
FR13 |
MM5/FP5 |
|||
FR14 |
MM6/FP6 |
|||
FR15 |
MM7/FP7 |
|||
FR16-17 |
XMM0 |
IA-32 |
64 |
IA-32 регистры SSE (Streaming SIMD Extension – потокового SIMD расширения) Младшие 64-бита регистра XMM0 соответствуют FR16{63:0}, а старшие 64-бита регистра XMM0 соответствуют FR17{63:0} |
FR18-19 |
XMM1 |
|||
FR20-21 |
XMM2 |
|||
FR22-23 |
XMM3 |
|||
FR24-25 |
XMM4 |
|||
FR26-27 |
XMM5 |
|||
FR28-29 |
XMM6 |
|||
FR30-31 |
XMM7 |
|||
FR32-127 |
|
undef F |
|
Пустые, при выполнении кода IA-32 |
Предикатные регистры |
||||
PR0 |
|
|
|
Содержит 1 |
PR1-63 |
|
undef F |
|
Пустые, при выполнении кода IA-32 |
Регистры переходов |
||||
BR0-5 |
|
unmod |
|
Сохраняемые регистры Itanium |
BR6-7 |
|
undef |
|
Пустые, при выполнении кода IA-32 |
Прикладные регистры |
||||
RSC |
|
unmod |
|
Сохраняемые регистры Itanium, не используются при выполнении IA-32 |
BSP |
|
|||
BSPSTORE |
|
|||
RNAT |
|
|||
CCV |
|
undef F |
64 |
Пустые, при выполнении кода IA-32 |
UNAT |
|
unmod |
|
Сохраняемый регистр Itanium, не используется при выполнении IA-32 |
FPSR.sf0 |
|
unmod |
|
Регистр числового состояния и управления Itanium |
FPSR.sf1,2,3 |
|
undef F |
|
Пустые, при выполнении кода IA-32 |
FSR |
FSW, FTW, MXCSR |
IA-32 |
64 |
IA-32 слова состояния и тегов, а также состояние SSE из регистра MXCSR |
FCR |
FCW, MXCSR |
64 |
IA-32 управляющее слово, а также управление SSE из регистра MXCSR |
|
FIR |
FOP, FIP, FCS |
64 |
IA-32 код операции, селектор кода и IP для среды x87 |
|
FDR |
FEA, FDS |
64 |
IA-32 селектор данных и смещение для среды x87 |
|
ITC |
TSC |
общий |
64 |
Общий IA-32 счетчик меток реального времени и интервальный таймер Itanium |
PFS |
|
unmod |
|
Сохраняемые регистры Itanium, не используются при выполнении IA-32. Предыдущее значение EC сохраняется в PFM |
LC |
|
|||
EC |
|
|||
EFLAG |
EFLAG |
IA-32 |
32 |
Арифметические и системные флаги IA-32, записывает некоторые условия битов через CPL и EFLAG.iopl |
CSD |
CSD |
64 |
Сегмент кода IA-32 (формат регистра)B |
|
SSD |
SSD |
64 |
Сегмент стека IA-32 (формат регистра)B |
|
CFLG |
CR0/CR4 |
64 |
Флаги управления IA-32 CR0=CFLG{31:0}, CR4=CFLG{63:32}, разрешена запись только CPL=0 |
|
При переключении в набор инструкций IA-32, старшие 32 бита игнорируются. При выходе, в старшие 32 бита расширяется знаковый 31-й бит.
Форматы дескриптора сегмента отличаются от формата памяти IA-32 (детальнее см. в разделе 6.2.3 «Сегментные регистры IA-32»). Модификация селектора или дескриптора не устанавливает бит обращения/занятости в памяти.
Дескрипторы LDT/GDT не защищены от модификации кодом типа Itanium на уровне пользователя.
Все регистры, и в текущем, и в предыдущих регистровых окнах, остаются в неопределенных состояниях после выполнения IA-32. Программное обеспечение должно сохранить эти значения перед входом в набор инструкций IA-32.
Отображение IA-32 регистров с плавающей точкой является физическим и не отображением от вершины стека IA-32.
Эти регистры используются процессором и могут быть оставлены в неопределенном состоянии после выполнения набора инструкций IA-32. Программное обеспечение должно сохранить эти значения перед входом в набор инструкций IA-32.
