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

6.5.2. Регистр NaT совокупности регистрового стека (rnat)

Как описано в разделе 6.1, механизм RSE ответственен за сохранение и восстановление (в/из вспомогательной памяти) NaT битов связанных со стековыми регистрами. RSE записывает регистр этой NaT совокупности (прикладной регистр RNAT) во вспомогательную память тогда, когда BSPSTORE{8:3} = 0x3F (по одной NaT совокупности для каждых 63-х регистров). Регистр RNAT выступает как временная область хранения для группы (до 63-х) не сохраненных NaT битов. Индекс RSE совокупности NaT битов (RSE.RNATBitIndex), определяет какой бит регистра RNAT, получает NaT бит сливаемого регистра, в результате RSE сохранения. 6-битовый RSE.RNATBitIndex, всегда равен BSPSTORE{8:3}. В результате RNAT{x} соответствует регистру, сохраненному по адресу: конкатенация (BSPSTORE{63:9}, x{5:0}, 0{2:0}).

Механизм RSE никогда не сохраняет во внешней памяти частичную NaT совокупность, поэтому программа должна сохранять и восстанавливать прикладной регистр RNAT, при переключении указателя вспомогательной памяти. Значение RSE.RNATBitIndex определяет, какие биты являются действительными. Биты RNAT{RSE.RNATBitIndex:0} содержат определенные значения, а биты RNAT{62:RSE.RNATBitIndex+1} содержат неопределенные значения. Бит 63 прикладного регистра RNAT всегда читается как 0. Записи в 63-й бит прикладного регистра RNAT всегда игнорируются. Выполнение инструкций управления RSE – loadrs и записи в BSPSTORE – точно также как RSE сливание регистра RNAT, приведет к тому, что содержимое регистра RNAT станет неопределенным. К прикладному регистру RNAT можно обращаться только тогда, когда RSC.mode=0. Если же RSC.mode не равно нулю, то обращение к прикладному регистру RNAT приведет к ошибке «Нелегальная операция».

6.5.3. Прикладные регистры указатели вспомогательной памяти (bspstore и bsp)

Для RSE определены два прикладных регистра указателя вспомогательной памяти BSPSTORE и BSP. Поскольку указатели вспомогательной памяти RSE всегда выровнены на 8-байтовую границу, то биты {2:0} указателей вспомогательной памяти всегда читаются как ноль. При записи прикладного регистра BSPSTORE, биты {2:0} в представленном адресе – игнорируются.

Указатель вспомогательной RSE памяти для сохранений (BSPSTORE), является 64-битным прикладным регистром, который обеспечивает главный интерфейс для трех указателей вспомогательной RSE памяти: BSP, BSPSTORE и RSE.BspLoad. К прикладному регистру BSPSTORE можно обращаться только тогда, когда RSC.mode=0. Если же RSC.mode не равно нулю, то обращение к прикладному регистру BSPSTORE приведет к ошибке «Нелегальная операция».

Чтение из BSPSTORE (mov из прикладного регистра BSPSTORE) вернет адрес следующего RSE сохранения.

Запись в BSPSTORE (mov в прикладной регистр BSPSTORE) имеет побочные эффекты для трех RSE указателей и процесса накопления NaT совокупности. Операция определена следующим образом: оба указателя BSPSTORE и RSE.BspLoad устанавливаются в предоставленный адрес, что вынуждает свести размер чистого раздела к нулю. Записи в прикладной регистр BSPSTORE не изменяют размера грязного раздела: указатель BSP устанавливается в предоставленный адрес, плюс размер грязного раздела, плюс размер любой вмешавшейся NaT совокупности. Грязный раздел сохраняется для того, чтобы позволить программному обеспечению изменить указатель вспомогательной памяти, без необходимости слить стек регистров. Запись в BSPSTORE приводит к тому, что содержимое регистра RNAT станет неопределенным. Поэтому программное обеспечение должно сохранить содержимое RNAT, перед записью в BSPSTORE. После записи в BSPSTORE, индекс совокупности NaT битов (RSE.RNATBitIndex) устанавливается битами {8:3} предоставленного адреса. Если при принудительном RSE сливании/заливании, в BSPSTORE используется не реализованный адрес, то вызывается ошибка «Нереализованный адрес данных».

Указатель вспомогательной памяти RSE (BSP), является 64-битовым, только читаемым, прикладным регистром. Запись в BSP (mov в прикладной регистр BSP) приводит к ошибке «Нелегальная операция». Чтение из BSP (mov из прикладного регистра BSP) возвращает адрес верхушки стека регистров в памяти. Это место является адресом во вспомогательной памяти, по которому будет записываться текущий GR32. Чтение BSP не имеет никаких побочных эффектов для любых внутренних RSE указателей или для NaT совокупности. Поэтому регистр BSP может быть прочитан, не зависимо от режима RSE, т.е. даже тогда, когда RSC.mode не равно нулю. Поскольку BSP определяется с помощью BSPSTORE и размером грязного раздела, то возможно, что если BSPSTORE содержит нереализованный адрес, то и BSP содержит нереализованный адрес. Чтения BSP всегда возвращают полный 64-битовый (возможно не реализованный) адрес, только последующее обращение к данным с нереализованным адресом вызовет ошибку «Нереализованный адрес данных».

Табл. 6.4 суммирует эффекты трех инструкций, которые обращаются к прикладным регистрам указателям вспомогательной памяти.

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

Инструкция

Воздействует на состояние

Чтение BSP

mov r1=AR[BSP]

Чтение BSPSTORE

mov r1=AR[BSPSTORE]

Запись BSPSTOREA

mov AR[BSPSTORE]=r2

GR[r1]

AR[BSP]

AR[BSPSTORE]

Нет

AR[BSP]{63:3}

Не меняется

Не меняется

(GR[r2]{63:3}+RSE.ndirty+ ((GR[r2]{8:3}+RSE.ndirty)/63

AR[BSPSTORE]{63:3}

Не меняется

Не меняется

GR[r2]{63:3}

RSE.BspLoad{63:3}

Не меняется

Не меняется

GR[r2]{63:3}

AR[RNAT]

Не меняется

Не меняется

Не определено

RSE.RNATBitIndex

Не меняется

Не меняется

GR[r2]{8:3}

  1. Запись в AR[BSPSTORE] имеет неопределенное поведение при неполном окне. См. раздел 6.8 «Поведение RSE при неполном регистровом окне».