- •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.1.3.2. Инструкция перехода к ia
Инструкция br.ia используется для безусловного перехода к набору инструкций IA-32. Адресаты IA-32 задаются с помощью 32-битного указателя виртуального адреса (но не эффективного адреса). Виртуальный IA-32 адрес усекается до 32 бит. Подсказки перехода для br.ia должны всегда устанавливаться как предсказывающие статистически принятый переход. Процессор переключается в набор инструкций IA-32 следующим образом:
IP{31:0} = BR[b]{31:0}
IP{32:63} = 0
EIP{31:0} = IP{31:0} – CSD.base
Переключение в набор инструкций IA-32 не изменяет уровень привилегий процессора.
Программное обеспечение должно гарантировать, что до использования перехода, и селектор, и дескриптор сегмента загружены должным образом. Если целевое значение EIP выходит за границу кодового сегмента, либо имеется нарушение привилегий сегментного кода, то на целевой инструкции IA-32 вызывается IA-32 исключение GPFault(0).
Процессор не гарантирует, что набор инструкций Itanium, генерирующий записи в поток инструкции IA-32, наблюдаем для процессора. Детальнее можно посмотреть в разделе 6.3.3 «Самомодифицирующийся код». Перед входом в систему команд IA-32, основанное на Itanium программное обеспечение должно гарантировать, что все предшествующие окна стека регистров сброшены в память. Все регистры остающиеся в текущем и предшествующем окнах стека регистров останутся в неопределенном состоянии после выполнения набора инструкций IA-32. Программное обеспечение не может полагаться на значения этих регистров после переключения набора инструкций. Детали есть ниже в разделе 6.4.1 «Механизм стека регистров».
6.1.4. Переключения режимов работы ia-32
Как описано ранее в разделе 6.1.2 «Выполнение набора инструкций IA-32», инструкции jmpe, br.ia и rfi, а также прерывания могут переключать процессор между двумя видами наборов инструкций. Допускаются переключения между архитектурой Itanium и всеми основными режимами IA-32. Как показано на рис. 6.2 br.ia и rfi переключают процессор из набора инструкций Itanium либо в IA-32 режим VM86, либо в реальный режим, либо защищенный режим. В то же время jmpe и прерывания переключают процессор из IA-32 режима VM86, реального режима, защищенного режима в набор инструкций Itanium. Переключения между режимами VM86, реальным и запрещенным, задается теми же самыми средствами, которые заданы в “Intel Architecture Software Developer’s Manual”.
-
P
SR.is
&!
CR0.pe
Защищенный режим IA-32
PSR.is &
CR0.pe &
EFLAG.vm
PSR.is &
CR0.pe &
!EFLAG.vm
PSR.is & CR0.pe &
! EFLAG.vm
Реальный режим IA-32
Режим VM86 IA-32
!
PSR.is!PSR.is
PSR.is &
!CR0.pe
Набор инструкций Itanium
PSR.is &
CR0.pe &
EFLAG.vm
Рис.6.2. Переключение режимов наборов инструкций.
Интерфейсный код, базирующийся на Itanium, ответственен за установку и загрузку непротиворечивой среды защищенного режима, реального режима или режима VM86 (например, загрузить сегментные селекторы и дескрипторы и т.п.), как это описано в разделе 6.2.3.2 «Дескриптор сегмента и целостность среды». Процессор применяет дополнительные проверки дескриптора сегмента, чтобы гарантировать, что операции выполнены в непротиворечивой манере.
