<<
>>

Команды управления сопроцессором

Последняя группа команд предназначена для общего управления работой сопро- цессора. Команды этой группы имеют особенность — перед началом своего выпол- нения они не проверяют наличие незамаскированных исключений.
Однако такая проверка может понадобиться, в частности, для того, чтобы при параллельной ра- боте основного процессора и сопроцессора предотвратить разрушение информа- ции, необходимой дл^ корректной обработки исключений, возникающих в сопро- цессоре. Поэтому некоторые команды управления имеют аналоги, выполняющие те же действия плюсе} Дну дополнительную функцию — проверку наличия исклю- чения в сопроцессоре! Эти команды имеют одинаковые мнемокоды (и машинные коды тоже), различающиеся только вторым символом — символом п: ш мнемокод, не содержащий второго символа и, обозначает команду, которая пе- ред началом своегq выполнения проверяет наличие незамаскированных исклю- чений; j мнемокод, содержащий второй символ п, обозначает команду, которая перед началом своего выполнения не проверяет наличия незамаскированных исклю- чений, то есть выполняется немедленно, что позволяет сэкономить несколько машинных тактов.
Как уже упоминав ось, эти команды имеют одинаковый машинный код. Отли- I чие лишь в том, что перед командами, не содержащими символа и, транслятор ас- семблера вставляет команду WAIT. Команда WAIT является полноценной командой основного процессора, и ее при необходимости можно указывать явно. Команда WAIT имеет аналог сррди команд сопроцессора — FWАIТ. Обеим этим командам со- ответствует код операции 9bh. Команда WАIТ/FWАJТ — это команда ожидания. Она предназначена для синхро- низации работы процессора и сопроцессора. Так как основной процессор и сопро- цессор работают параллельно, то может создаться ситуация, когда за командой сопроцессора, изменя ющей данные в памяти, следует команда основного процес- сора, которой эти данные требуются.
Чтобы синхронизировать работу этих команд, необходимо включит о между ними команду WAIT/FWAIT. Встретив данную коман- ду в потоке команд, основной процессор приостановит свою работу до тех пор, пока не поступит апп аратный сигнал о завершении очередной команды в сопро- цессоре. Здесь есть еще один эффект, отмеченный ранее. Он касается корректной обработки исключений и связанной с ними информации. Далее с необходимой степенью подробности будут рассмотрены команды, вхо- дящие в группу команд управления. Некоторые из этих команд мы уже применя- ли в программах этой главы. Из всех команд управления первой логично рассмотреть команду, приводящую сопроцессор в некоторое начальное состояние, — это команда инициализации со- процессора FINIТ/FN⅛IТ. Она инициализирует управляющие регистры сопроцес- сора определенными значениями. и Регистр управления CWR инициализируется числом 037h, что означает установку следующих режимов: D поле округления RС = 00 — округление к ближайшему целому; П биты 0...5 устав овл∙ены в единицу, что означает маскирование всех исключе- ний; ' I п поле управления точностью PC = 11 — максимальная точность (64 бита). ⅜ Регистр состояний SWR инициализируется нулевым значением, что означает отсутствие исключений и указание на то, что физический регистр стека сопро- цессора RО является вершиной стека и соответствует логическому регистру SТ(0). 9 Регистр теговТWR инициализируется единичным значением — это означает, что все регистры стека сопроцессора пусты. ii Регистры указателей данных DPR и команд IPR инициализируются нулевыми значениями. Данную команду используют перед первой командой сопроцессора в програм- ме и в других случаях, когда необходимо привести сопроцессор в начальное состо- яние. Следующие две команды работают с регистром состояния SWR. Ш FSТSW/FNSТSW ах — команда сохранения содержимого регистра состояния SWR в регистре АХ. Эту команду целесообразно использовать для подготовки к услов- ным переходам по описанной при рассмотрении команд сравнения схеме.
я FSTSW/FNSTSW приемник — команда сохранения содержимого регистра состояния SWR в ячейке памяти. От рассмотренной ранее команда отличается типом опе- ранда — теперь это ячейка памяти размером два байта (в соответствии с раз- мерностью регистра SWR). Обратите внимание на то, что команды, работающие с регистром SWR, выпол- няют только считывание содержимого этого регистра. Запись не предусмотрена, так как она попросту не требуется за исключением, возможно, поля ТОР, которое является указателем текущей вершины стека. Для изменения этого поля пред- усмотрены отдельные команды FINСSТР, FDЕСSТР, которые будут рассмотрены да- лее. Следующие две команды, работающие с информацией в регистре управления CWR, напротив, поддерживают действие записи и чтения содержимого этого регистра. ш FSТСW/FNSТСW приемник — команда сохранения содержимого регистра управле- ния CWR в ячейке памяти размером два байта. Эту команду целесообразно ис- пользовать для анализа полей маскирования исключений, управления точнос- тью и округления. Следует заметить, что операндом не является регистр АХ, в отличие от команды FSTSW/FNSTSW. ii FLDCW источник — команда загрузки значения ячейки памяти размером 16 битов в регистр управления CWR. Эта команда выполняет действие, противополож- ное действию команды FSTCW/FNSTCW. Команду FLDCW целесообразно использо- вать для задания или изменения режима работы сопроцессора. Следует отме- тить, что если в регистре состояния SWR установлен любой бит исключения, то попытка загрузки нового содержимого в регистр управления CWR приведет к возбуждению исключения. По этой причине необходимо перед загрузкой ре- гистра CWR сбросить все флаги исключений в регистре SWR. Следующая команда — команда без операндов FCLEX/FNCLEX — позволяет сбро- сить флаги исключений в регистре состояния SWR сопроцессора, которые, в част- ности, необходимы для корректного выполнения команды FLDCW. Ее также приме- няют в случаях, когда необходимо сбрасывать флаги исключений в регистре SWR, например, в конце подпрограмм обработки исключений. Если этого не делать, то при исполнении первой же команды сопроцессора прерванной программы (кроме тех команд, которые имеют в названии своего мнемокода второй символ л) опять возбуждается исключение. Как мы отметили ранее, сопроцессор имеет две команды, которые работают с указателем стека в регистре SWR.
• FINСSТР —команда|увеличения указателя стека на единицу (поле ТОР) в регист- ре SWR. Команда н|е имеет операндов. Действие команды FINCSTP подобно дей- ствию команды FS(Г, но она извлекает значение операнда из стека «в никуда». Таким образом, эту команду можно использовать для выталкивания ставшего ненужным операнда из вершины стека. Команда работает только с полем ТОР и не изменяет соответствующее данному регистру поле в регистре тегов TWR, то есть регистр остае(гся занятым и его содержимое из стека не извлекается. • FDЕСSТР —команд^ уменьшения указателя стека (поле ТОР) в регистреSWR. Ко- манда не имеет операндов. Действие команды FDЕСSТР подобно действию ко- манды FLD, но она) не помещает значения операнда в стек. Таким образом, эту команду можно использовать для проталкивания внутрь стека операндов, ра- нее включенных р него. Команда работает только с полем ТОР и не изменяет соответствующее [данному регистру поле в регистре тегов TWR, то есть регистр остается пустым. j Следующая команда, FFREE st(i), помечает любой регистр стека сопроцессора как пустой. Это команда освобождения регистра стека SТ(i). Команда записывает в поле регистратего^, соответствующего регистру SТ(i), значение 1 lb, что соответ- ствует пустому регистру. При этом указатель стека (поле ТОР) в регистре SWRи со- держимое самого регистра не изменяются. Применяя эту команду, помните, что SТ(i) — это относительный, а не физический номер регистра стека сопроцессора. Необходимость в этй команде может возникнуть при попытке записи в регистр SТ(i), который помечфн как непустой. В этом случае будет возбуждено исключение. Для предотвращений этого применяется команда FFREE. В сопроцессоре ефrь также команда FNОР, не производящая никаких действий и влияющая только |iа регистр указателя команды IPR. В группе команд (управления можно выделить подгруппу команд, работающих с так называемой средой сопроцессора. Среда сопроцессора — это совокупность регистров сопроцессора и их значений. Среда сопроцессора может быть частич- ной или полной.
О какой именно среде идет речь, определяется одной из рассмот- ренных далее команд: № FSАVЕ/FNSАVЕпри⅛мник — команда сохранения полного состояния среды сопро- цессора в памят^, адрес которой указан операндом приемник. Размер области памяти зависит с|т размера операнда сегмента кода (usеlб или usеЗ2): I . . D usеlб — обласjгь памяти должна составлять 94 байта (рис. 17.20, а, б): 80 бай- тов для восьмiи регистров из стека сопроцессора и 14 байтов для остальных регистров сопроцессора с дополнительной информацией; D use32 — область памяти должна составлять 108 байтов (рис. 17.20, в, г): 80 бай- тов для восыЦи регистров из стека сопроцессора и 28 байтов для остальных регистров сопроцессора с дополнительной информацией; II FRSТОR источник ф команда восстановления полного состояния среды сопроцес- сора из области (памяти, адрес которой указан операндом источник. Сопроцес- сор будет работать в новой среде сразу после окончания работы команды FRSTOR.
Рис. 17.20. Структура области памяти с полной средой сопроцессора в различных режимах

Следующие две команды сохраняют частичную среду сопроцессора, в состав которой входят регистры SWR, СWR, ТWR, DPR и IРR. FSТЕNV/FNSТЕNV приемник — команда сохранения частичного состояния среды сопроцессора в область памяти, адрес которой указан операндом приемник. Раз- мер области памяти зависит от размера операнда сегмента кода (usеlб или use32). Формат области частичной среды сопроцессора совпадает с форматом области полной среды (рир. 17.21), за исключением содержимого стека сопроцессора (80 байт). i FLDENV источник — команда восстановления частичного состояния среды сопро- цессора содержим|ым из области памяти, адрес которой указан операндом ис- точник. Информация в данной области памяти была ранее сохранена командой FSТЕNV/FNSТЕNV.

| I

Команды сохранения среды целесообразно применять в обработчиках исклю- чений, так как только с помощью данных команд можно получить доступ, напри- мер, к регистрам DPR и IPR. Не исключено использование этих команд в подпро- граммах или в многозадачной среде для переключения контекстов программ. Области памяти, содержащие сохраненные состояния среды сопроцессора, есть смысл располагать IВ стеке основной программы. Тогда, в частности, появляется возможность передать информацию коду, находящемуся в другом кольце защиты основного процессора. Судя по последним командам, сопроцессор может работать не только в реаль- ном, но и в защищенном режиме. Для этого необходимо выполнять переключение сопроцессора между этими режимами. Операция переключения реализуется спе- циальными командами. * FSЕТРМ — команда переключения сопроцессора из реального в защищенный ре- жим. Команда не имеет операндов. Действие команды влияет только на выпол- нение команд сохранения и восстановления среды. Для реального и защищен- ного режимов состав и формат информации среды сопроцессора несколько различается. ϋ FRSТРМ — команда переключения сопроцессора из защищенного в реальный ре- жим. Команда не имеет операндов. Действие команды влияет только На выпол- нение команд сохранения и восстановления среды.

<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Команды управления сопроцессором:

  1. Определение команды.
  2. Признаки команды.
  3. § 4.5. Деятельность команд в организации
  4. Пример настройки и реабилитации в футбольной команде
  5. Работа с другими командами
  6. Четыре шага по созданию эффективной команды
  7. Кто становится лидером команды
  8. ШЕСТЬ СТУПЕНЕЙ НА ПУТИ СОЗДАНИЯ КОМАНДЫ.
  9. Статья 1040. Обращение взыскания на имущество, переданное в управление, по требованию кредитора установщика управления
  10. Создание деловой команды «Вероятно, я не лучший советчик в этом вопросе».
  11. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  12. § 3. Право управления предприятием как особый вид абсолютных прав. Право полного и ограниченного управления (п. 1774-1776)
  13. УПРАВЛЕНИЕ ВРЕМЕНЕМ VERSUS УПРАВЛЕНИЕ СОБОЙ
  14. § 4. Правопреемство как следствие приобретения права управления предприятием. Условия отчуждения и приобретения права управления предприятием (п. 1777-1782)
  15. Управление термами
  16. Управление деканатами