Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПиП МПС(Ассемблер Левицкий экт 4) / MProc / M9 / Системная архитектура часть 4..doc
Скачиваний:
57
Добавлен:
16.04.2013
Размер:
751.1 Кб
Скачать

4.1.9. 32-Битная виртуальная адресация

32-битная виртуальная адресация данных поддерживается в архитектуре набора инструкций Itaniumс помощью трех моделей: расширения нулями, расширения знаком и «swizzling» указателя. Обращения к памятиIA-32 используют модель расширения нулями, все линейные виртуальные 32-битныеIA-32 адреса, расширяются нулями до 64-битного виртуального адреса.

Модель расширения нулями выполняет вычисление адреса с помощью инструкций addиshladd,только если программное обеспечение убедится, что старшие 32 бита всегда нули. Эта модель ограничивает 32-битную виртуальную адресацию виртуальным регионом 0. В этой модели регионы с 1 по 7 доступны только для 64-битной адресации.

В модели расширения знаком, программное обеспечение гарантирует, что старшие 32 бита виртуального адреса всегда равны биту 31. Вычисления адреса используют инструкции add,shladd иsxt. Эта модель разбивает 32-битное адресное пространство на две половины, которые распространяются на 231байтов виртуальных регионов 0 и 7, внутри 64-битного адресного пространства. В этой модели регионы со 2 по 6 доступны только для 64-битной адресации.

Модель указателя «swizzling» выполняет вычисление адреса с помощью инструкцийaddp4иshladdp4. Эти инструкции генерируют 32-битный адрес в пределах 64-битного виртуального адресного пространства, как это показано на рис. 4.17. 32-битное виртуальное адресное пространство делится на 4 секции, которые распространяются на 230байтов виртуальных регионов от 0 до 3, внутри 64-битного адресного пространства. В этой модели регионы с 4 по 7 доступны только для 64-битной адресации.

base

offset

63

32

31

30

29

0

63

32

31

0

63

62

61

60

32

31

0

0

000000

Рис. 4.17. Генерация 32-битного адреса использующаяaddp4

В модели указателя «swizzling», отображения в пределах каждого региона не обязательно начинаются с нулевого смещения, т.к. старшие 2 бита 32-битного адреса служат внутри каждого региона и номером виртуального региона, и смещением. Биты виртуального адреса {62:61} не участвуют в сложении адреса, поэтому некоторые регионы могут быть на самом деле больше, чем 230байтов из-за сложения 32-битного смещения и отсутствия переноса в биты {62:61}. Заметим, что преобразования является не разрушающим: преобразованный 64-битный указатель может быть использован как 32-битный указатель. Плоское 31- или 32-битное адресное пространство может быть создано путем назначения одного и того же идентификатора региона для регистров непрерывных регионов. Переходы в другой 230байтовый регион выполняются путем вычисления адреса перехода в 32-битном виртуальном пространстве и дальнейшим преобразованием в 64-битный указатель с помощьюaddp4. В противном случае, адреса переходов будут расширены за 230байтовую границу внутри первоначального региона.