- •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. Модель состояния прикладных регистров 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 Performance Monitor Data Registers
|
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 |
|
undefF |
|
Рабочие при выполнении 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 |
|
undefF |
|
Рабочие при выполнении 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 |
|
undefD |
|
Пустые, при выполнении кода 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(StreamingSIMDExtension– потокового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.