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

4. Модель прикладного программирования.

Этот раздел описывает архитектурные функциональные возможности с точки зрения прикладного программиста. Инструкции Itaniumсгруппированы в связанные функции и дается краткий обзор их поведения. Если не отмечено иное, всегда, перед использованием все непосредственные значения расширяются знаком до 64 бит. Модель программирования с плавающей точкой описана отдельно в главе 5. Подробная информация об инструкцияхItaniumдается в томе 3 «Справочник набора инструкций».

Основные особенности модели программирования заключаются в том, что здесь есть:

  • Стек основных регистров (General Register Stack)

  • Инструкции целочисленного вычисления (Integer Computation Instructions)

  • Инструкции сравнения и предикаты (Compare Instructions and Predication)

  • Инструкции доступа к памяти и спекуляция (Memory Access Instructions and Speculation)

  • Инструкции переходов и предсказание переходов (Branch Instructions and Branch Prediction)

  • Инструкции мультимедиа (Multimedia Instructions)

  • Инструкции передачи файла регистров (Register File Transfer Instructions)

  • Строки символов и счетчики заполнения (Character Strings and Population Count)

  • Передача уровня привилегий (Privilege Level Transfer)

4.1. Стек регистров

Как описано в разделе 3.1.2 «Основные регистры», файл основных регистров делится на два подмножества – статическое и стековое. Статическое подмножество является видимым для всех процедур и включает в себя 32 регистра от GR0 доGR31. Стековое подмножество – локально для каждой процедуры и может изменять размер от 0 до 96, начиная сGR32. Механизм стека регистров осуществляется путем переименования адресов регистров как вторичный эффект процедурных вызовов и возвратов. Механизм этого переименования не видим для прикладных программ. Регистровый стек запрещен в процессе выполнения набора инструкцийIA-32.

Статическое подмножество должно сохраняться и восстанавливаться на границах процедур согласно программному соглашению. Стековое подмножество автоматически сохраняется и восстанавливается механизмом стека регистров (RegisterStackEngine–RSE) без явного вмешательства программного обеспечения (подробнее обRSEсм. главу 6 «RSE» во втором томе). Все другие регистровые файлы видны всем процедурам и должны сохраняться и восстанавливаться программно в соответствии с программными соглашениями.

4.1.1. Управление стеком регистров

Регистры в стековом подмножестве видимые для данной процедуры называются окном (frame) стека регистров. Дополнительно, окно делится на две области переменного размера: локальная область и область вывода.

Сразу после вызова, размер локальной области только что активизированного окна – нулевой, а размер области вывода равен размеру области вывода вызывателя и обе эти области вывода наложены друг на друга.

Размеры локальной в выходной областей окна могут быть изменены использованием инструкции alloc, задающей непосредственные значения (immediate), которые определяют размер окна (sizeofframe–sof) и размер локальной области (sizeoflocal–sol).

Примечание. В ассемблерной инструкцииalloc,используется три непосредственных значения для определения значенийsolиsof: размер входной, размер локальной и размер выходной областей. Размерsolопределяется путем добавления входного непосредственного значения и локального непосредственного значения; значениеsofопределяется путем сложения всех трех непосредственных значений.

Значение sofзадает полный размер стекового подмножества видимого текущей процедуре; значениеsolзадает размер локальной области. Размер выходной области определяется разницей междуsofиsol. Значения этих параметров для текущей активной процедуры поддерживаются в маркере текущего окна (CFM).

Чтение стекового регистра вне текущего окна возвращает неопределенный результат. Запись стекового регистра вне текущего окна приведет к ошибке «Нелегальная операция».

Если выполняется инструкция br.callилиbrl.call, тоCFMкопируется в поле маркера предыдущего окна (PFM) прикладного регистраPFS(предыдущее функциональное состояние) и следующим образом создается окно вызванной процедуры:

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

  • Размер локальной области устанавливается в 0.

  • Размер окна вызванной процедуры (sofbl) устанавливается по размеру выходной области вызывающей процедуры (sofa–sola).

Значения в выходной области окна регистрового стека вызывающей процедуры являются видимыми для вызванной процедуры. Это наложение разрешает параметрам и возвращаемым значениям передаваться между процедурами и при этом полностью находиться в регистрах.

Окна процедур могут динамически изменять размеры путем использования инструкции alloc. Инструкцияallocне делает переименований, а только изменяет размер окна регистрового стека и деление между локальной и выходной областями. Обычно, когда вызывается процедура, для ее использования выделяется некоторое количество локальных регистров (которое включает параметры, передаваемые ей в выходных регистрах вызывающей процедуры), плюс область вывода (для передачи параметров процедурам, которые она будет вызывать). Только что выделенные регистры (включая их битыNaT) имеют неопределенные значения.

Если выполняется инструкция br.ret, тоCFMвосстанавливается изPFM, а регистры переименовываются, восстанавливая конфигурацию вызвавшей процедуры. ЗначениеPFMявляется локальным состоянием процедуры и должно сохраняться и восстанавливаться не активной процедурой. РегистрCFMне доступен напрямую прикладным программам, а модифицируется только через выполнение вызовов, возвратов и инструкцийalloc, cover, clrrrb.

32

46

52

sol

sof

sol

sof

Окно ProcA

Local A

Output A

14

21

x

x

sofa=21

call

sola=14

32

38

Окно ProcB

Output B1

0

7

14

21

после call

sofb1=7

alloc

32

48

50

Окно ProcB

Local B1

Output B2

16

19

14

21

после alloc

sofb2=19

return

solb2=16

32

46

52

Окно ProcA

Local A

Output A

14

21

14

21

после return

Рис.4.1. Поведение регистрового стека при процедурном вызове и возврате.

Рис.4.1. изображает поведение стека регистров, когда процедура A(procA) вызывает процедуруB(procB). Состояние стека регистров показано в четырех точках: до вызова, непосредственно в процессе вызова, после выполнения процедуройBallocи, наконец, после возврата из процедурыBв процедуру А.

Большинство прикладных программ, для эффективного использования стека регистров, нуждается только в запуске инструкций allocи сохранении восстановленииPFM. Детальное знание механизма регистрового стека (RSE) требуется только некоторым специализированным прикладным программам, таким как, цепочечным пакетам уровня пользователя, отладчикам и т.п. (См. часть 6 «Механизм стека регистров» во втором томе).

Соседние файлы в папке M9