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

6.2. Внутреннее состояние rse

Табл. 6.1 описывает архитектурное состояние, поддерживаемое механизмом стека регистров. Описанные здесь элементы внутреннего состояния RSE, не предоставлены программисту прямо, как архитектурно видимые регистры. Следовательно, внутреннее состояниеRSEне нуждается в сохранении при переключениях контекста или прерываниях. Вместо этого, оно меняется как побочный эффект инструкций, связанных с регистровым стеком. Для описания эффектов этих инструкций, необходимо полное описание внутреннего состоянияRSE. Чтобы отличить их от архитектурно видимых ресурсов, все элементы внутреннего состоянияRSEимеют префикс «RSE». Другие ресурсы, связанные сRSE, являются архитектурно видимыми и представляются программному обеспечению, как прикладные регистрыRSC,BSP,BSPSTOREиRNAT.

Табл. 6.1. Внутреннее состояние RSE

Имя

Описание

Соответствует

RSE.N_STACKED_PHYS

Количество физических регистров в стеке (NumberofStackedPhysicalregister): размер файла физических стековых регистров зависит от реализации.

RSE.BOF

Номер регистра нижнего края окна (Bottom-of –frame register number): номер физического регистра GR32.

AR[BSP]

RSE.StoreReg

Номер регистра сохранения RSE(RSEStoreRegisternumber): физический номер регистра, который будет следующим регистром сохраненнымRSE.

AR[BSPSTORE]

RSE.LoadReg

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

RSE.BspLoad

RSE.BspLoad

Указатель вспомогательной памяти (BackingStorePointer) для загрузок памяти: 64-битный адрес вспомогательной памяти, на 8 байт больший, чем следующий адрес для загрузки механизмомRSE.

RSE.BspLoad

RSE.RNATBitIndex

Индекс совокупности NaT битов RSE (RSE NaT Collection Bit Index): 6-битный указатель в регистре RNAT (определен, когда обновляется совокупность битов RNAT).

AR[BSPSTORE] {8:3}

RSE.CFLE

Разрешение RSE для загрузки текущего окна (RSE Current Frame Load Enable): управляющий бит, который разрешает RSE загрузить регистры в текущее окно после br.ret или rfi.

RSE.ndirty

Количество грязных регистров (numberofdirtyregisters) в регистровом стеке.

RSE.ndirty_words

Количество грязных слов (numberofdirtywords) в регистровом стеке, плюс количество соответствующих регистровNaTсовокупности.

AR[BSP] – AR[BSPSTORE]

6.3. Разделы стека регистров

Файл физических регистров процессора обеспечивает, по крайней мере, 96 стековых регистров. Фактическое число стековых регистров (RSE.N_STACKED_PHYS) зависит от реализации и должно быть кратно 16. Рис. 6.3 иллюстрирует циклический характер файла физических регистров и показывает соответствие регистров и вспомогательной памяти. Рис. 6.3 показывает также четыре раздела файла стековых регистров:

Чистый(clean) раздел (светло-серый оттенок): регистры, которые содержат значения из окон родительской процедуры. Регистры в этом разделе были успешно слиты во вспомогательную память с помощьюRSE, и их содержимое не было изменено, с того момента, как они были записаны во вспомогательную память.

Грязный(dirty) раздел (просто серый оттенок): регистры, которые содержат значения из окон родительской процедуры. Регистры в этом разделе еще не были слиты во вспомогательную память с помощьюRSE. Количество регистров, содержащихся в грязном разделе (расстояние междуRSE.StoreRegиRSE.BOF) упоминается какRSE.ndirty.

Текущее(current) окно (темный оттенок): стековые регистры, выделенные для вычислений. Позиция текущего окна в файле физических стековых регистров определяется регистром нижнего края окна (RSE.BOF). Количество регистров в текущем окне определяется размером поля окна (CFM.sof) в маркере текущего окна.

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

invalid

Physical Stacked Registers

RSE.LoadReg

RSE.StoreReg

RSE.BOF

CFM. sof

clean

dirty

Current

RSE load

RSE store

return, rfi

call, cover

return, rfi, alloc

Higher Addresses

RSE. BspLoad

AR[BSPSTORE]

AR[BSP]

Backing Store

Рис. 6.3. Четыре раздела стека регистров.

Границы между четырьмя разделами стека регистров определяются маркером текущего окна (CFM) и тремя номерами физических регистров:StoreReg,LoadregиBOF. Как описано в табл. 6.1, каждый из этих номеров физических регистров имеет соответствующий 64-битный указатель вспомогательной памяти. (Например,AR[BSP] всегда содержит адрес, где будет запомненGR[32] текущего окна).

Рис. 6.3 показывает также, влияние различных инструкций на границы разделов. Загрузки RSEиспользуют недействительные регистры. АктивныеRSEзагрузки и сохранения расширяют чистый раздел. Инструкцииbr.call, brl.callилиcover, могут увеличить указатель нижнего края окна (RSE.BOF), который перемещает регистры из текущего окна в грязный раздел. Инструкцияalloc, может сжать или расширить текущее окно путем обновленияCFM.sof. Инструкцииbr.retиrfiмогут сжать или расширить текущее окно путем обновления и указателя нижнего края окна (RSE.BOF), иCFM.sof.