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

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при неполном регистровом окне».