- •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.3.3. Проверки целостности среды ia-32 во время выполнения
Процессоры в семействе процессоров Itanium, в процессе выполнения делают дополнительные проверки для верификации целостности среды. Эти проверки являются дополнительными к проверкам процесса выполнения определенным в процессорах IA-32 и выделены в табл. 6.4. Перечислены, но не выделены существующие IA-32 проверки процесса выполнения. Дескрипторные поля не упомянутые в таблице не проверяются. Как задано в таблице, проверки процесса выполнения делаются либо при загрузках кода инструкции IA-32, либо при обращении памяти данных IA-32 к одному из заданных сегментных регистров. Эти проверки процесса выполнения не делаются при переключении из набора инструкций типа Itanium в набор инструкций IA-32.
Табл.6.4. Проверки целостности среды IA-32 во время выполнения
Рекомендуется для … |
Ресурс |
Реальный режим |
Защищенный режим |
Режим VM86 |
Вызывается ошибка |
… всех кодовых загрузок |
PSR.spl |
не 0 |
игнорируется |
не 3 |
Ошибка загрузки кода (GPFault(0))A |
EFLAG.vmC FLG.pe |
EFLAG.vm равен 1, а CFLG.pe равно 0 |
||||
EFLAG.vif EFLAG.vip |
EFLAG.vip & EFLAG.vif & CFLG.pe & PSR.cpl==3 & (CFLG.pvi | (EFLAG.vm & CFLG.pme)) |
|
|||
… всех кодовых загрузок CS |
dpl |
игнорируется |
не 3 |
Ошибка загрузки кода (GPFault(0)) |
|
d-бит |
не 16 бит |
||||
type |
Игнорируется (может быть типа exec или data) |
||||
|
GPFault, если данные расширяются вниз |
||||
s, p, a-бит |
Не равны 1 |
||||
g-бит/limit |
Нарушение границы сегмента |
||||
… обращений памяти данных к SS |
dpl |
dpl != PSR.cpl |
Ошибка стека |
||
d-бит |
игнорируется |
не 16 бит |
|||
type |
игнорируется |
расширение данных вниз |
|||
|
Чтение и недоступность чтения, запись и недоступность записи |
||||
s, p, a-бит |
Не равны 1 |
||||
g-бит/limit |
Нарушение границы сегмента |
||||
… обращений памяти данных к DS, ES, FS и GS |
dpl |
игнорируется |
GPFault(0) |
||
d-бит |
игнорируется |
не 16 бит |
|||
type |
игнорируется |
расширение данных вниз |
|||
|
Чтение и недоступность чтения, запись и недоступность записи |
||||
s, p, a-бит |
Не равны 1 |
||||
g-бит/limit |
Нарушение границы сегмента |
||||
… обращений памяти данных к CS |
dpl |
игнорируется |
GPFault(0) |
||
d-бит |
игнорируется |
не 16 бит |
|||
type |
игнорируется |
расширение данных вниз |
|||
|
Проверки чтения/записи игнорируются |
Чтение и недоступность чтения, запись и недоступность записи |
Проверки чтения/записи игнорируются |
||
s, p, a-бит |
Не равны 1 |
||||
g-бит/limit |
Нарушение границы сегмента |
||||
… обращений памяти к LDT, GDT или TSS |
dpl |
игнорируется |
GPFault (Селектор/0)B |
||
type |
игнорируется |
||||
s-бит |
Не равен 0 |
||||
a, d-бит |
игнорируется |
||||
p-бит |
Не равен 1 |
||||
g-бит/limit |
Нарушение границы сегмента |
||||
Ошибки выборки кода вызываются как высокоприоритетные GPFault(0).
При обращении к GDT или LDT, код ошибки в вызове GPFault – это значение селектора. В других случаях, код ошибки является нулем.
