Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка.doc
Скачиваний:
617
Добавлен:
22.05.2015
Размер:
2.56 Mб
Скачать

Глава 9. Основы 64-разрядной архитектуры

В настоящее время большой ряд компаний выпускают 64-разрядные процессоры, имеющие 64-разрядную шину адреса и 64-разрядные регистры. Среди них можно выделить компании Intel и AMD, которые выпускают совместимые между собой процессоры.

IA-64 (Intel Architecture-64) – 64-битная микропроцессорная архитектура, разработанная совместно компаниями Intel и Hewlett Packard. Первыми 64-разрядными процессорами компании Intel явились Itanium, Itanium 2. Она основана на VLIW в терминах Intel EPIC (Explicity Parallel Instruction Computing – явное параллельное выполнение команд).

IA-64 несовместима с архитектурой x86. Изначально IA-64 предлагалась в качестве платформы для домашних компьютеров, но после выпуска фирмой AMD 64-битной архитектуры x86-64 (AMD64), сохранившей совместимость с x86, актуальность использования платформы IA-64 где-либо кроме серверов пропала, несмотря на то, что в конце 2001 года для IA-64 была выпущена специальная версия Windows XP 64‑bit for IA64. Для обеспечения совместимости с приложениями IA-32 поддерживается два режима декодирования команд: VLIW и CISC. Переключение между режимами программное.

Архитектура EM64T стала развиваться компанией Intel как противовес AMD64в нишеx86-совместимых процессоров. АрхитектураEM64T совместима с архитектурой x86и, следовательно, с архитектуройAMD64.

9.1 Состав и назначение регистров микропроцессора ia-64

В таблице 9.1. представлен состав и назначение основных регистров микропроцессора IA-64. Стек регистров заменяет стек процессора, реализуемый в памяти. При вызове подпрограмм нет надобности сохранять регистры в памяти и восстанавливать их после завершения подпрограммы. Также нет надобности передавать подпрограмме параметры через ячейки памяти и считывать из памяти результат. Если 96 регистров стека микропроцессора недостаточно для этого, то процессор автоматически переносит часть стека в память, освобождая регистровое пространство стека для осуществления вызовов новых подпрограмм. По возвращении из этих подпрограмм содержимое вытесненного в память стека переписывается обратно из памяти в регистровый стек.

Прикладные регистры AR0-AR127 – специализированные (в основном 64-разрядные) регистры, применяемые в IA-64 и IA-32. AR0-AR7 называются регистрами ядра; запись в них привилегированна, но они доступны по чтению в любом приложении и используются для передачи приложению сообщений от операционной системы. Среди других прикладных регистров укажем на AR16 (RSC) – регистр конфигурации стека регистров, используемый для управления работой "машиной" стека регистров IA-64 (RSE); AR17 (BSP), в котором находится адрес в памяти, где сохраняется положение GR32 в текущем окне стека; AR40 (FPSR) – регистр состояния для команд с плавающей запятой IA-64; AR44 (ITC) – интервальный таймер; AR64 (PFS) – регистр предыдущего состояния функции, куда автоматически копируются некоторые другие регистры при вызове подпрограмм; AR65 (LC), используемый для организации циклов со счетчиком, и, наконец, 6-разрядный регистр эпилога AR66 (EC).

Таблица 9.1. Состав и назначение регистров микропроцессора IA-64

Название

Кол-во

Разр-ть

Назначение

gr0-gr127

128

(32+96)

64+1

Целочисленные регистры общего назначения:

gr0 – только для чтения, всегда равен нулю;

gr1-gr31 – для глобальных данных;

gr32-gr127 – стек регистров для хранения локальных переменных подпрограмм, передаваемых параметров и адресов возврата.

64 бита данных и 1 бит достоверности содержимого регистра NaT (1 – данные достоверны, 0 – данные спекулятивной команды недостоверны).

fr0-fr127

128

82

Регистры с плавающей точкой:

fr0 – только для чтения, всегда равен +0.0;

fr1 – только для чтения, всегда равен +1.0;

fr2-fr31 – для глобальных данных;

fr32-fr127 – вращаемые регистры.

82=64(мантисса)+17(экспонента)+1(знак).

pr0-pr63

64

1

Предикатные регистры для спекулятивного выполнения ветвей условных переходов. Всего 16 статичных регистров и 48 вращаемых. Результат команды достоверен если соответствующей ей предикатный регистр равен 1

br0-br7

8

64

Регистры ветвлений для определения назначенных адресов ветвей условных переходов.

ar0-ar127

128

64

Прикладные регистры.

IP

1

64

Указатель связки команд.

CPUID

не менее 4

64

Регистры идентификаторы процессора.

CFM

1

38

Регистр маркера текущего окна стека регистров.

64-разрядные регистры GR0-GR127 применяются не только для целочисленных операций IA-64. GR8-GR31 в режиме IA-32 используются также как целочисленные регистры и регистры селекторов и дескрипторов сегментов IA-32. GR0-GR31 называются статическими регистрами (GR0 всегда содержит 0), а GR32-GR127 – стекируемыми регистрами. Статические регистры 'видны' всем программам. Стекируемые регистры становятся доступными через окно стека регистров, включающее локальные и выходные регистры, число которых задается командой alloc.

82-разрядные регистры с плавающей запятой FR0-127 также подразделяются на статические FR0-FR31 (причем всегда FR0=0.0, FR1=1.0) и вращаемые FR32-FR127. FR8-31 в режиме IA-32 используются для хранения чисел с плавающей запятой и в качестве мультимедийных регистров.

Вращение регистров является в некотором роде частным случаем переименования регистров, применяемого во многих современных суперскалярных процессорах с внеочередным спекулятивным выполнением команд. В отличие от них, вращение регистров в IA-64 управляется программно.

64-разрядные регистры переходов BR0-BR7 применяются для указания адреса перехода в соответствующих командах перехода (если адрес перехода не кодируется в команде явно). Регистры предикатов PR0-PR63 являются одноразрядными; в них помещаются результаты команд сравнения. Обычно эти команды устанавливают сразу два регистра PR в зависимости от условия – соответственно истинность условия и его отрицания. Такая избыточность обеспечивает дополнительную гибкость.

В IA-64 предикатные регистры применяются для организации программно конвейеризованных циклов (Software Pipelining – SWP). Использование предикатных регистров – важнейшая особенность, кардинально отличающая IA-64 от всех других микропроцессоров.

PR0-PR15 являются статическими (PR0 всегда равен 1), а PR16-PR63 – вращаемыми. Статические предикатные регистры используются в командах условного перехода. Кроме того, почти все команды IA-64 могут быть выполнены “под предикатом”.

Регистры идентификаторы процессора: регистры CPUID0 и CPUID1 – информация о производителе; регистр CPUID2 – серийный номер процессора; регистр CPUID3 – тип процессора (семейство, модель, версия архитектуры и т.п.) и число CPUID-регистров. Разряды регистра CPUID3 указывают на поддержку конкретных особенностей IA-64, т.е. тех, которые реализованы именно в данном процессоре.