ОБРАБОТКА СПЕЦИФИЧЕСКИХ ИСКЛЮЧЕНИЙ
НЕДОПУСТИМЫЕ И НЕВЫПОЛНИМЫЕ ИНСТРУКЦИИ
Недопустимая инструкция
- это термин, обозначающий какой-либо битовый шаблон слова, который
не соответствует битовому шаблону первого слова допустимой инструкции
MC68000. При выборке такой инструкции возникает исключение по недопустимой
инструкции. Компания Motorola оставила за собой право на определение
инструкций с использованием операционных кодов любых допустимых инструкций.
Три битовых шаблона всегда приводят к ловушке недопустимой инструкции
во всех процессорах семейства MC68000. Этими шаблонами являются $4AFA,
$4AFB, $4AFC. Двое из них, $4AFA и $4AFB зарезервированы для системных
продуктов Motorola. Третий, $4AFC, зарезервирован для нужд пользователя
(таких, как ведение команды ловушки недопустимой инструкции ( ILLEGAL
) ).
ПРИМЕЧАНИЕ: В дополнение к
вышеописанным опкодам недопустимых инструкций
MC68010 определяет восемь инструкций приостанова (BKPT)
с битовыми шаблонами $4848-$484F. Эти инструкции, как правило,
вызывают переход процессора к обработке исключения недопустимой
инструкции. Однако, перед сохранением информации в стеке,
также выполняется шинный цикл подтверждения приостанова,в котором
на линиях кода функции (FC2-FC0) высокий уровень, а на всех
адресных линиях низкий. Процессор не принимает и не получает
данные в течение этого цикла. Был ли шинный цикл подтверждения
приостанова прекращен сигналом DTACK#, BERR# или VPA#,
процессор продолжает обработку недопустимой инструкции. Назначение
этого цикла обеспечить программный приостанов, который
сигнализирует внешней аппаратуре, когда он будет выполнен.
Шаблоны слов с установленными в 1010 или 1111 битами
15-12 трактуются как невыполнимые инструкции, и с целью эффективной
эмуляции этим шаблонам соответствуют отдельные векторы исключений.
Коды операций, начинающиеся с 1111 (линия F), имеются в MC68020 и
определяют инструкции сопроцессора. Эти вектора позволяют операционной
системе программно эмулировать невыполнимые инструкции.
Обработка исключений по недопустимым инструкциям
подобна обработке исключений ловушек. После выборки инструкции и попытки
декодирования процессор определяет, что была предпринята попытка выполнения
недопустимой инструкции, и начинает обработку исключения. Затем стековый
фрейм исключений для группы 2 помещается в стек супервизора, и выбирается
вектор недопустимой инструкции.
НАРУШЕНИЕ ПРИВИЛЕГИЙ
Различные привилегированные инструкции обеспечивают
системную безопасность. Попытка выполнить привилегированную инструкцию
в режиме пользователя приводит к исключению. Привилегированными инструкциями
являются:
Обработка исключения по нарушению привилегий сходна
с обработкой недопустимой инструкции. Когда инструкция выбрана и декодирована,
а процессор распознаел попытку нарушения привилегий, он начинает обработку
исключения. Формируется копия регистра состояния, процессор переходит
в супервизорный режим, трассирование отключается. Для обращения к
вектору нарушения привилегий генерируется номер вектора, а программный
счетчик и копия регистра состояния сохраняются в стеке супервизора.
Если процессор MC68010, то также сохраняется и слово формата/смещения.
Сохраненная копия программного счетчика является адресом первого слова
инструкции, вызвавшей нарушение привилегий. Выполнение инструкций
начинается с адреса, находящегося в векторе исключения по нарушению
привилегий.
ТРАССИРОВАНИЕ
Чтобы оказать помощь при разработке программ, семейство
MC68000 содержит средство, позволяющее трассировать каждую последующую
инструкцию. Когда трассирование доступно, после выполнения каждой
инструкции возникает исключение. Таким образом, отладочная программа
может отображать выполнение программы пользователя при тестировании.
Трассированием управляет бит T в супервизорной
части регистра состояния. Если бит T сброшен (выключен), трассирование
недоступно, и происходит нормальная обработка от инструкции к инструкции.
Если бит Т установлен (включен) в начале выполнения инструкции, исключение
по трассированию возникает после завершения каждой инструкции. Если
инструкция не была выполнена из-за того, что она недопустима, или
из-за нарушения привилегий, исключение по трассированию не происходит.
Исключение по трассированию также не произойдет, если инструкция прервана
сбросом, сбоем шины или ошибкой адреса. Если инструкция выполнена
и по завершении имеется ожидающее прерывание, перед обслуживанием
прерывания обрабатывается исключение по трассированию. Если в ходе
выполнения инструкции происходит исключение, вызванное этой инструкцией,
обработка этого исключения предшествует обработке исключения по трассированию.
В качестве примера экстремальной ситуации, иллюстрирующей
эти правила, можно рассмотреть случай, когда приходит запрос на прерывание
во время выполнения инструкции TRAP при включенном трассировании.
Сначала обрабатывается исключение ловушки, затем исключение по трассированию,
и, наконец, обработка прерывания. Выполнение инструкций продолжается
в процедуре обслуживания прерывания.
После выполнения инструкции перед началом следующей
инструкции начинается обработка исключения по трассированию. Создается
копия регистра состояния, процессор переводится в супервизорный режим,
а бит Т регистра состояния сбрасывается, отменяя дальнейшее трассирование.
Для ссылки на вектор трассирования генерируется номер вектора, а текущее
значение программного счетчика и копия регистра состояния сохраняются
в стеке супервизора. В стеке супервизора MC68010 также сохраняется
слово формата/смещения. Выполнение инструкций начинается по адресу,
находящемуся в векторе исключения по трассированию.
СБОЙ ШИНЫ
Исключение по сбою шины происходит, когда внешняя
логика запрашивает обработку сбоя шины исключением. Текущий шинный
цикл прерывается. Текущая работа процессора прерывается, и он немедленно
приступает к обработке исключения. Средства обработки сбоя шины идентичны
во всех процессорах; однако в стековом фрейме MC68010 содержится большее
количество информации. Больший стековый фрейм обеспечивает продолжение
выполнение инструкции, поддерживая виртуальную память MC68010.
СБОЙ ШИНЫ
Обработка исключения по сбою шины проводится в
обычном порядке. Формируется копия регистра состояния, процессор переводится
в режим супервизора, трассирование отключается. Для ссылки на вектор
сбоя шины генерируется номер вектора. С этапа выборки инструкции или
операнда, когда произошел сбой шины, контекст процессора более подробный.
Для запоминания этого контекста дополнительная информация (значение
программного счетчика и копия регистра состояния) сохраняется в супервизорной
части стека. Содержимое пограммного счетчика расположено за 2-10 байт
от адреса первого слова инструкции, которая совершила сбой шины при
обращении. Если сбой происходит в процессе выборки следующей инструкции,
сохраняемое значение программного счетчика находится недалеко от текущей
инструкции, которая может быть даже инструкцией перехода, ветвления
или возврата. Помимо обычной информации процессор делает внутреннюю
копию первого слова инструкции, которая выполнялась, и адреса, по
которому производилось обращение в прерванном цикле. Также сохраняется
специфическая информация о доступе, типе доступа (чтение или запись),
работе процессора (обработке инструкции) и выходах кода функции в
момент сбоя шины. Процессор выполняет инструкцию, если он в нормальном
режиме обрабатывает исключение группы 2; процессор не выполняет инструкцию
при обработке исключений группы 1 или 0. На рис.6.7 показано содержимое
стека супервизора. Если сбой шины возникает на последнем шаге обработки
исключения, т.е. либо во время чтения вектора исключения, либо в процессе
выборки инструкции, программный счетчик принимает значение адреса
вектора исключения. Хотя этой информации не совсем достаточно для
полного восстановления после сбоя шины, становится возможной программная
диагностика. Процедура обработки исключения отвечает за очистку стека
и определение порядка дальнейшего выполнения.
Если сбой шины происходит во время обработки исключения
по сбою шины, ошибке адреса или по сбросу, процессор останавливается
и всякая обработка прекращается. Такой останов упрощает обнаружение
катастрофических сбоев системы, и с этого момента процессор "удаляет"
себя из системы, чтобы защитить память от ошибочного обращения. Перезапустить
остановленный (halted) процессор можно только внешним сбросом.
|
|