Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / motorola / 68LAB6.DOC
Скачиваний:
14
Добавлен:
16.04.2013
Размер:
142.03 Кб
Скачать

Многократные ис.

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

Группа 0: конец машинного такта. приоритет

RESET âûøå

ошибка шины

ошибка адреса

Группа 1: конец операции.

трассировка

прерывания

Группа 2 конец цикла шины.

неопознанная команда

команда эмулятора

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

Группа 3: во время выполнения команды. ниже

TRAP, TRAPV, CHK, деление на ноль.

ИС группы 0 распознаются в конце машинного такта. Эти ИС имеют наивысший приоритет и выполняются немедленно. ИС группы 1 имеют более низкий приоритет и распознаются после выполнения текущей команды. ИС группы 2 распознается после выборки команды. Самый низкий приоритет имеют группа 3 распознающиеся во время выполнения команды.

Если одновременно поступает ИС нулевой группы и любое другое ИС более низкого приоритета, то выполняется ИС нулевой группы, а второе игнорируется.Если одновременно поступают два ИС из любых ненулевых групп, то выполняются оба, сначала с более высоким приоритетом, затем с низким.

Практическая часть.

В данной практической работе мы рассмотрим следующие виды ИС:

·ИС "ошибка адреса".

·ИС "ошибка шины".

·ИС "деление на ноль"

·неопознанные команды и эмулятор.

·прерывание от внешнего устройства.

·программные ИС:

а. команда TRAP #I;

b. команда CHK EA,Dn.

ИС "ошибка адреса"

Формирование процессором нечетного адреса при операции со словом или длинным словом является ошибочным. При попытке обращения к нему для выборки команды, операнда слова или длинного слова процессор вырабатывает ИС "ошибка адреса" с вектором 3. В отличии от обычной ИС в этом случае сохраняется адрес не следующей команды, а адрес текущей команды плюс десятичное число от 2 до 10 в зависимости от того в какой момент времени произошла ИС, т.е. значение РС, сохраненое в стеке, точно не определено. Кроме того, для упрощения обработки ошибки вместе с регистрами SR и РС в стеке супервизора сохраняется дополнительная информация, включающая в себя командное слово операции, вызвавшей ИС, ошибочный адрес и слово состояния шины. В приведенном ниже примере мы вызовем эту ИС с помощью неверной команды и проанализируем сохраненную в стеке дополнительную информацию.

1000 MOVE.L #$1100,$0C переадресация вектора ИС "ошибка

адреса" на подпрограмму ее обработки,

расположенную по адресу $1100

MOVE.L #$12345678,$1233 неверная пересылка

1100 MOVE.W (A7)+,D1 запись слова состояния шины в регистр D1

MOVEA.L (A7)+,A1 запись ошибочного адреса в регистр А1

SWAP D1 перемещение слова состояния шины в

старшее слово регистра D1

MOVE.W (A7)+,D1 запись командного слова операции,

вызвавшей ошибку, в регистр D1

RTE возврат из подпрограммы обработки ИС

Перед запуском данной программы установите точку останова по адресу слова, следующего за командой MOVE.L #$12345678,$1233. После этого запустите программу командой G 1000.

Первая команда программы записывает адрес подпрограммы обработки ИС в память по адресу $0C, соответствующего вектору ¹3 (см. таблицу векторов ИС в теоретической части). При выполнении следующей (ошибочной) команды возникает ИС с вектором ¹3, в стеке сохраняются текущие значения регистра статуса и программного счетчика, а также дополнительная информация, описанная выше. Затем процессор переходит к выполнению подпрограммы обработки ИС по адресу $1100. В этой подпрограмме из стека извлекается дополнительная информация и записывается в внутренние регистры. Необходимо отметить, что в общем случае невозможно выйти из подпрограммы обработки ИС "ошибка адреса" или "ошибка шины" обычными методами (используя сохраненный в стеке программный счетчик), т.к. его значение точно не определено. В нашем примере это представляется возможным благодаря тому, что ИС возникает после считывания последнего слова команды MOVE.L #$12345678,$1233 и таким образом значение РС указывало наследующее после команды слово.

По завершению работы программы просмотрите внутренние регистры процессора: в регистре А1 хранится ошибочный адрес $1233; младшее слово регистра D1 содержит командное слово операции вызвавшей ошибку $21FC соответствующее команде MOVE.L #$12345678,$1233 и, наконец, в старшем байте находится слово состояния шины $21E5. Слово состояния шины показывает, что ошибка произошла при попытке записи (R/W=0) данных в режиме супервизора (функциональный код равен 101) во время выполнения обычной команды (I/N=0).

ИС "ошибка шины"

В приведенном ниже примере, при попытке записи в области памяти, относящиеся к ПЗУ, генерируется ИС "ошибка шины" с вектором номер 2. В общем случае это происходит при обращении к несуществуещей памяти или какой либо неисправности в апаратной части (внешняя логика выставляет сигнал BERR, который и генерирует ИС). Немедленно прекращается выполнение цикла и запускается процесс обработки ИС. Дополнительная информация, сохраняемая в стеке, и механизм обработки такие же, как и в случае ИС "ошибка адреса". Как и в предыдущем эксперименте, в рассмотренном ниже примере мы проанализируем дополнительную информацию полученную генерацией ИС "ошибка шины". В этом примере мы будем использовать без изменений подпрограмму обработки ИС взятую из предыдущего эксперимента.

1000 MOVE.L #$1100,$08 переадресация вектора ИС

MOVE.L #$12345678,$800D00 попытка записи в ПЗУ

Перед выполнением эксперимента установите точку останова по адресу слова следующим за командой MOVE.L #$12345678,$800D00. Затем запустите выполнение командой G 1000. По завершению работы программы просмотрите внутренние регистры процессора, содержимое которых имеет тот же смысл, что и в предыдущем эксперементе.

ИС "деление на ноль"

Если происходит деление числа на ноль, то результат, естественно, не имеет смысла. Для этих случаев разработчики МС68000 предусмотрели специальную ИС "деление на ноль" с вектором 5. В рассмотренном ниже примере выполняется команда деления на ноль, в следствии чего гененрируется ИС "деление на ноль". Подпрограмма обработки ИС расположенна по адресу $1100.

1000 MOVE.L #$1100,$14 переадресация вектора ИС на подпрограмму ее

обработки

MOVEQ #$3,D0 предварительная запись операнда в D0

DIVU #0,D0

Соседние файлы в папке motorola