Поведение процессора при выполнении команды в зависимости от режима, в котором он находится, страница 7

Команды CALLM и RTM проверяют значения полей  опций  и  типа  в дескрипторе модуля и стековом окне модуля соответственно.  Если эти поля содержат неправильное значение или устройство управления внешней памятью обнаружило запрос на недопустимое изменение права доступа, то запрашиваемый вызов  или  возврат  из  модуля квалифицируется как недопустимый и  не  выполняется.  Подробнее механизм вызова/возврата для модулей описан  в  ПРИЛОЖЕНИИ  D.1

ПОДДЕРЖКА МЕХАНИЗМА МОДУЛЬНОСТИ.

Команда cpRESTORE передает поле формата области сохранения  для проверки сопроцессору. Если сопроцессор не подтвердит  правильность поля формата, то MC68020 возбудит  исключение  по  ошибке формата.

Если при какой-либо из этих проверок будет обнаружен неправильный формат управляющих данных, то процессором будет  возбуждено исключение по ошибке формата. Для этого исключения будет создано окно короткого формата и выполнение будет продолжено с адреса, заданного вектором исключения по ошибке формата.  Сохраненный программный счетчик указывает на команду, вызвавшую ошибку.

6.3.7 Запрещенные и нереализованные команды

Запрещенными командами называются все кодовые комбинации размером в слово, не соответствующие кодам  первых  слов  допустимых команд MC68020, а также команда MOVEC  с  неопределенным  полем спецификации регистра в первом слове расширения. Кодовые комбинации размером в слово с битами [15:12], равными 1010, считаются нереализованными командами, и именуются  A-кодами  операции.

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

Кодовые комбинации с битами [15:12], равными  1111,  (именуемые

F-кодами операции) используются для команд сопроцессора, но могут  возбуждать  и  исключение по нереализованной команде. Если процессор встречает команду с F-кодом, то он сначала  выполняет цикл  шины с обращением в пространство ЦП типа $2, адресуя один из 8 сопроцессоров (код которого задается битами [11:9]  операционного  слова). Если сопроцессор не откликается и цикл завершается с ошибкой шины, то процессор приступает к обработке исключения по нереализованной команде и извлекает вектор  эмуляции

F-кода. Так могут быть эмулированы функции сопроцессора.

Обработка исключений по запрещенным и нереализованным  командам аналогична обработке программных исключений. После считывания и декодирования команды процессор  фиксирует  попытку  выполнения несуществующей команды и приступает к обработке  исключения  до выполнения команды. Копируется регистр состояния  ,  происходит переход в режим супервизора, отключается трассировка. Генерируется номер вектора для  получения  адреса  процедуры  обработки запрещенной команды, а в случае нереализованной команды - адреса программы эмуляции. Смещение вектора  исключения  соответственно по запрещенной или нереализованной команде, текущее  значение программного счетчика, а также копия  регистра  состояния сохраняются в стеке супервизора. Сохраненное значение программного счетчика указывает на команду, вызвавшую исключение. Наконец, с адреса, содержащегося в векторе исключения,  возобновляется выполнение команд.

6.3.8 Нарушение привилегированности

Для обеспечения защиты системы некоторые команды сделаны привилегированными (см. Таблицу 6-4). Попытка выполнения  какой-либо привилегированной команды в режиме пользователя приведет к возникновению исключения. Нарушение привилегированности происходит также при запросе сопроцессора на проверку привилегированности, если процессор в это время находится в режим пользователя.

Таблица 6-4. Привилегированные команды

----------------------------¬

¦ ANDI to SR      MOVEC     ¦

¦ EORI to SR      MOVES     ¦

¦ cpRESTORE       ORI to SR ¦

¦ cpSAVE          RESET     ¦

¦ MOVE from SR    RTE       ¦

¦ MOVE to SR      STOP      ¦

¦ MOVE USP                  ¦

L---------------------------Обработка исключений по нарушению привилегированности аналогична обработке запрещенных команд. После считывания и декодирования команды процессор фиксирует попытку нарушения  привилегированности и возбуждает исключение до выполнения команды. Копируется регистр состояния , происходит переход в режим  супервизора, отключается трассировка. Генерируется номер вектора для получения адреса процедуры обработки нарушения привилегированности. Смещение вектора исключения по нарушению привилегированности, текущее значение программного счетчика, а также  копия  регистра состояния сохраняются в стеке  супервизора.  Сохраненное значение программного счетчика указывает на первое слово команды, вызвавшей исключение по нарушению привилегированности.  Наконец, с адреса, содержащегося в векторе исключения,  возобновляется выполнение команд.

6.3.9 Трассировка

Процессоры серии M68000 позволяют выполнять покомандную трассировку программ для нужд отладки.  Процессор  MC68020  допускает также трассировку команд, которая изменяет ход выполнения программы. В режиме трассировки исключение возбуждается  после  выполнения команды, позволяя тем самым программе-отладчику отслеживать поведение отлаживаемой  программы.

Для трассировки используются биты T0 и T1  супервизорной  части регистра состояния. Если оба бита сброшены, то трассировка  отменена и команды выполняются как обычно. Если к моменту  начала выполнения команды бит T1 сброшен, а бит T0 установлен в единицу, то после завершения выполнения команды исключение по  трассировке будет возбуждено в том случае, когда эта команда порождает изменение программного счетчика, отличное от  естественного. В этом режиме трассируются все команды условного  и  безусловного перехода, ловушки,  программные  исключения,  возвраты, манипуляции с регистром состояния (поскольку процессору  приходится производить повторное считывание слов, которые в процессе предвыборки могли оказаться считанными из  программного  пространства супервизора, а не из программного пространства  пользователя), а также общие команды управления сопроцессорами, влияющие на порядок изменения программного счетчика. Если к моменту начала выполнения команды бит T1 установлен в единицу, а бит T0