2016-11-22 2 views
1

В настоящее время я изучаю язык ассемблера с помощью M68000, и мне трудно понять, как использовать инструкции TRAP с 5 по 13. Кажется, я не могу найти какие-либо примеры в Интернете, когда кто-то создает свои собственные инструкции TRAP. Например, как бы вы написали простую инструкцию TRAP # 6 для переключения состояния процессора. (состояние пользователя или состояние супервизора).Создание собственного обработчика исключений TRAP?

+0

, пожалуйста, отправьте свой пример кода, если у вас есть вопрос – Sachith

ответ

3

Написание обработчика ловушки не является тривиальным, и особенно режим переключения привилегий является волосатым (поскольку он не просто изменяет режим привилегий, но также переключает между двумя или тремя указателями на стек, которые имеют процессор: USP/MSP/ISP).

Следующее препятствие состоит в том, что каждый член семейства 68K использует свой собственный набор кадров стека, что означает то, что нажимается на SSP, отличается в зависимости от реальной модели ЦП (68000 является «худшим» нарушителем, поскольку исходный набор стеков фреймы не имеют поля идентификации, в отличие от более высокой модели, которая имеет общее слово индикатора формата кадра). Форматы кадров в стопках описаны в руководстве M68K Familiy, которое вы можете найти в Интернете.

Третья проблема - фактически установить ваш обработчик. Вам нужно найти вектор для ловушки в памяти, который можно переместить на на любой адрес во всех 68K CPU, кроме 68000 через регистр VBR. Не говоря уже о том, что вы не можете получить доступ к VBR в пользовательском режиме.

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

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

+0

Если вы работаете на голом металле, убедитесь, что ваш стек супервизора правильно инициализирован. – tofro

Смежные вопросы