Скачиваний:
57
Добавлен:
16.04.2013
Размер:
480.26 Кб
Скачать

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. Для сегментов расширяющихся вниз, это поле содержит минимальный эффективный адрес в сегменте. Детали условия нарушения границы сегмента см. вIntelArchitectureSoftwareDeveloper’sManual. Если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.