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

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

NaT Bits

63

0

0

GR0=0

GR1 – GR3

GR4 – GR7

GR8 (EAX)

GR9 (ECX)

GR10 (EDX)

GR11 (EBX)

GR12 (ESP)

GR13 (EBP)

GR14 (ESI)

GR15 (EDI)

GR16-GR17 (selectors)

GR18-GR23

GR24

(segment descr.)

GR25 – GR26

GR27 – GR31 (segment descr.)

GR32-GR127


Branch register

63

0

BR0

BR1

. . .

BR5

BR6 – BR7

63

0

IP (PC)

37

0

CFM

63

5

0

PRS

User Mask

CPU Identifiers

63

0

CPUID0

CPUID1

. . .

CPUIDn

FP register

P

81

0

FR0 = 0.0

FR1 = 1.0

FR2 – FR5

FR6 – FR7

FR8-FR15 (MMX0-7,FP0-7)

FR16-FR31 (XMM0-7)

FR32-FR127

erformance Monitor Data Registers

63

0

PMD0

PMD1

. . .

PMDm


Predicate

0

P0

1

P1

P2

P3

. . .

P61

P62

P63

Application registers

63

0

AR0 - AR7

KR0-KR7

AR16

RSC

AR17

BSP

AR18

BSPSTORE

AR19

RNAT

AR21

FCR

AR24

EFLAG

AR25

CSD

AR26

SSD

AR27

CFLG

(CR0-CR4)

AR28

FSR

AR29

FIR

AR30

FDR

AR32

CCV

AR36

UNAT

AR40

FPSR

AR44

ITC

AR64

PFS

AR65

LC

AR66

EC

AR127

Рис. 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

undef F

Рабочие при выполнении 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

undef F

Рабочие при выполнении 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

undef D

Пустые, при выполнении кода 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 (Streaming SIMD Extension – потокового 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

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

  2. Форматы дескриптора сегмента отличаются от формата памяти IA-32 (детальнее см. в разделе 6.2.3 «Сегментные регистры IA-32»). Модификация селектора или дескриптора не устанавливает бит обращения/занятости в памяти.

  3. Дескрипторы LDT/GDT не защищены от модификации кодом типа Itanium на уровне пользователя.

  4. Все регистры, и в текущем, и в предыдущих регистровых окнах, остаются в неопределенных состояниях после выполнения IA-32. Программное обеспечение должно сохранить эти значения перед входом в набор инструкций IA-32.

  5. Отображение IA-32 регистров с плавающей точкой является физическим и не отображением от вершины стека IA-32.

  6. Эти регистры используются процессором и могут быть оставлены в неопределенном состоянии после выполнения набора инструкций IA-32. Программное обеспечение должно сохранить эти значения перед входом в набор инструкций IA-32.