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

4.1.2. Инструкции стека регистров

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

Кроме того, имеются три инструкции, обеспечивающие явное управление состоянием регистрового стека. Эти инструкции используются в цепочечных и контекстных переключениях, которые требуют соответствующего переключения вспомогательной памяти для регистрового стека. Подробнее о явном управлении RSE см. часть 6 «Механизм стека регистров» во втором томе.

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

Инструкция cover создает новое окно нулевого размера (sof = sol =0). Новое окно создается выше существующего окна (без наложения). Локальная и выходная области предыдущего окна автоматически сохраняются. Инструкция cover должна быть последней инструкцией в группе инструкций, в противном случае вызывается ошибка «Нелегальная операция». Инструкция cover не может быть предикатной.

Инструкция loadrs гарантирует то, что заданная часть регистрового стека присутствует в физических регистрах. Она приостанавливает выполнение инструкций до тех пор, пока количество байт указанных в поле loadrs прикладного регистра RSC, не будут заполнены из вспомогательной памяти с помощью механизма RSE (начиная с текущего BSP). Если для поля RSC.loadrs задать нулевое значение, то инструкция loadrs может быть использована для того, чтобы указать, что все стековые регистры вне текущего окна должны быть загружены из вспомогательной памяти перед использованием. Кроме того, стековые регистры вне текущего окна (которые не были слиты при помощи RSE) не будут запоминаться во вспомогательной памяти. Инструкция loadrs должна быть первой инструкцией в группе инструкций, в противном случае результат не определен. Инструкция loadrs не может быть предикатной.

Табл.4.1. содержит архитектурно видимый состав, связанный с регистровым стеком. В табл.4.2. собраны инструкции управления стеком регистров. Переходы типа вызовов и возвращений, которые затрагивают стек, описаны в разделе «Инструкции переходов».

Табл.4.1. Состав архитектурной видимости связанный с регистровым стеком.

Регистр

Описание

AR[PFS].pfm

Поле маркера предыдущего окна

AR[RSC]

Прикладной регистр конфигурации регистрового стека

AR[BSP]

Прикладной регистр указателя вспомогательной памяти

AR[BSPSTORE]

Прикладной регистр указателя вспомогательной памяти для сохранений памяти

AR[RNAT]

Прикладной регистр RSE для набора NaT

Табл.4.2. Инструкции управления стеком регистров

Мнемоника

Действие

alloc

Распределяет окно регистрового стека

flushrs

Сбрасывает регистровый стек во вспомогательную память

loadrs

Загружает регистровый стек из вспомогательной памяти

cover

Прикрывает текущее стековое окно (и образует новое)