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

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

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

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