Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 6..doc
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
480 Кб
Скачать

6.2.1. Регистры общего назначения ia-32

Целочисленные регистры размещены в младших 32 битах основных Itanium регистров от GR8 до GR15. Значения старших 32 битов игнорируются при переходе к выполнению инструкций IA-32. После завершения выполнения набора инструкций IA-32, в каждом из регистров GR8-GR15, на старшие 32 бита расширяется знаковый бит 31.

Соглашения вызова IA-32 и Itanium требуют, чтобы до входа в набор инструкций IA-32, код типа Itanium загрузил состояние IA-32 в память и регистры.

63

32

31

0

расширено знаком

EAX … EDI{31:0}

Рис. 6.4. Основные регистры IA-32 (от GR8 до GR15)

6.2.2. Указатель инструкций ia-32

Процессор поддерживает два указателя инструкций для ссылок на набор инструкций IA-32, EIP (32-битный эффективный адрес) и IP (64-битный адрес эквивалентный IP набора инструкций Itanium). IP генерируется путем сложения базы кодового сегмента и EIP, а затем расширяется нулем до 64 бит. Не следует путать IP с 16-разрядным эффективным указателем адреса инструкций для 8086. EIP – это смещение в текущем кодовом сегменте, в то время как, IP – это 64-битный виртуальный указатель, общий с набором инструкций Itanium.

При выполнении инструкций IA-32, определены следующие отношения между EIP и IP.

IP{61:32} = 0;

IP{31:0} = EIP{31:0} + CSD.Base;

Значение EIP прибавляется к базе кодового сегмента и расширяется нулями до 64-битного виртуального адреса при каждой выборке инструкции IA-32. Если в процессе выборки, EIP превысит границу кодового сегмента, то на указываемой инструкции вызывается ошибка GP. Эффективные адреса инструкций (как последовательные значения, так и адресаты переходов) превышающие 4GB, усекаются до 32-бит, т.е. в результате получается циклическая 4G-байтовая адресация.

6.2.3. Сегментные регистры ia-32

Селекторы и дескрипторы сегментов IA-32 размещены в регистрах GR16-GR29 и AR25-AR26. Дескрипторы поддерживаются в расшифрованном (unscrambled) формате и показаны на рис.6.6. Этот формат отличается от IA-32 формата шифрования памяти дескриптора. Расшифрованный формат регистра спроектирован для поддержания быстрого преобразования 16/32-битных сегментных указателей IA-32 в виртуальные адреса для кода типа Itanium. Инструкции, загружающие сегментный регистр IA-32, расшифровывают формат памяти GDT/LDT в регистровый формат дескриптора при загрузке сегментного регистра. Также, программы типа Itanium могут напрямую загружать дескрипторные регистры, если они правильно расшифровываются программой. Когда программы типа Itanium загружают эти регистры, то в это время, не выполняются никакие проверки целостности данных, даже если в любых полях были загружены незаконные значения. Для полного определения всех битовых полей семантик полей обратитесь к Intel Architecture Software Developers Manual.

63

48

47

32

31

16

15

0

GS

FS

ES

DS

GR16

TSS

LDT

SS

CS

GR17

Рис. 6.5. Формат селекторов сегментных регистров IA-32

63

62

61

60

59

58

57

56

55

52

51

32

31

0

g

d/b

ig

av

p

dpl

s

type

limit{19:0}

base{31:0}

Рис. 6.6. Формат дескриптора регистра сегмента кода/данных IA-32

Табл. 6.2. Поля сегментного регистра IA-32

Поле

Биты

Описание

selector

15:0

Значение селектора сегмента (биты поля, описаны в Intel Architecture Software Developer’s Manual)

base

31:0

Значение базы сегмента. Это значение расширяется нулями до 64 бит, точка начала сегмента в 64-битном виртуальном адресном пространстве для обращений к памяти набора инструкций IA-32

limit

51:32

Граница сегмента. Содержит максимальное значение эффективного адреса для расширяющихся вверх сегментов для обращений к памяти набора инструкций IA-32. Для сегментов расширяющихся вниз, это поле содержит минимальный эффективный адрес в сегменте. Детали условия нарушения границы сегмента см. в Intel Architecture Software Developer’s Manual. Если g-бит сегмента равен 1, то граница сегмента масштабируется ( (limit<<12) | 0xFFF ).

type

55:52

Идентификаторы сегментов данных/кода, включая бит доступа (бит 52). Толкования битов см. в Intel Architecture Software Developer’s Manual.

s

56

Бит несистемности. Если он 1, то это сегмент данных, если он 0, то это системный сегмент.

dpl

58-57

Уровень привилегий дескриптора. DPL проверяется для разрешения доступа к памяти для обращений к памяти набора инструкций IA-32

p

59

Бит присутствия сегмента. Если 0, и обращение к памяти использует этот сегмент, то для сегментов данных (CS, DS, ES, FS, GS) генерируется IA-32 исключение GPFault, а для SS – генерируется IA-32 исключение StackFault

av

60

Игнорируется. Для дескрипторов CS, SS чтение этого поля возвращает нули. Для дескрипторов DS, ES, FS, GS чтение этого поля возвращает последнее значение, которое было записано кодом типа Itanium. Чтение этого поля возвращает 0, при записи дескрипторными загрузками IA-32. Это поле игнорируется процессором, во время выполнения набора инструкций IA-32. Доступно для программного использования, но не для будущего использования этого поля.

ig

61

Игнорируется. Для дескрипторов CS, SS чтение этого поля возвращает нули. Для дескрипторов DS, ES, FS, GS чтение этого поля возвращает последнее значение, которое было записано кодом типа Itanium. Чтение этого поля возвращает 0, при записи дескрипторными загрузками IA-32. Это поле игнорируется процессором, во время выполнения набора инструкций IA-32. Это поле может иметь будущее использование и должно быть программно установлено в ноль.

d/b

62

Размер сегмента. Если 0, то эффективные адреса набора инструкций IA-32 усекаются до 16 бит, в противном случае эффективные адреса имеют 32 бита. Кроме того, для кодового сегмента, в инструкциях IA-32, бит d/b управляет размером операнда по умолчанию. Если 1, то размер операнда по умолчанию – 32 бита, в противном случае – 16 бит.

g

63

Дробность границы сегмента. Если 1, то для обращений к памяти набора инструкций IA-32, граница сегмента масштабируется (limit<<12) | 0xFFF. Это поле игнорируется для обращений к памяти набора инструкций типа Itanium.