
- •Микропроцессор мс68000
- •Обработка исключительных ситуаций.
- •Виды исключительных ситуаций.
- •Многократные ис.
- •Практическая часть.
- •1100 Lea 1200,a5 адрес начала сообщения
- •1100 Move.L a7,a0 копирование указателя стека
- •111Е move.L d1,d2 иначе выполняется операция вычитания
- •100А move.B #247,d7 установка функции ввода символа с
- •103С chk d1,d2 проверка размерности
- •1108 Cmpa.L a5,a6 конец строки?
- •Контрольные вопросы и задания
- •1. В чем состоит различие между прерываниями и исключительными ситуациями?
- •1. Напишите подпрограмму перехода из пользовательского режима в режим супервизора с использованием команды эмулятора.
Лабораторная
работа N6. Обработка исключительных
ситуаций.
Микропроцессор мс68000
Лабораторный практикум
Лабораторная работа N6.
Обработка исключительных ситуаций.
Теоретическая часть
Иногда процессор временно отклоняется от выполнения текущей программы, для того чтобы немедленно откликнутся на некоторую появившуюся, чаще нештатную, ситуацию. Этот процесс называется обработкой исключительной ситуации (ИС)1.
Существует достаточно много источников ИС, но все они могут быть поделены на две большие группы: внешние и внутренние. Классификация ИС показана на рис.1.
Рис.1 Классификация ИС.
Внутренние ИС (генерируемые самим процессором) возникают при выполнении ошибочной команды, специальных команд или при трассировке. Внешние ИС более разнообразны, т.к. могут поступать от различных внешних источников. Есть стандартные внешние ИС: RESET, ошибка шины.
Обработка исключительных ситуаций.
Для того чтобы микропроцессор мог безошибочно распознать различные типы ИС и адекватно на них реагировать, каждому ИС ставится в соответствие 8-битный вектор, либо вырабатываемый процессором, либо поступающий извне. Этот вектор преобразуется в адрес, называемый вектором ИС, который вычисляется следующим образом:
вектор = номер вектора ИС õ4.
Вектор ИС содержит адрес начала подпрограммы обработки данной ИС.
Полный перечень векторов используемых в МС68000 дан в таблице 1.
Таблица 1.
номер вектора
|
вектор (HEX)
|
область памяти
|
òèï ÈÑ
|
000
|
000
|
SP
|
Reset-инициализация указателя стека
|
001
|
004
|
SP
|
Reset-инициализация указателя стека
|
002
|
008
|
SD
|
ошибка шины
|
003
|
00C
|
SD
|
ошибка адреса
|
004
|
010
|
SD
|
неопознанная команда
|
005
|
014
|
SD
|
деление на ноль
|
006
|
018
|
SD
|
CHK
|
007
|
01C
|
SD
|
TRAPV
|
008
|
020
|
SD
|
нарушение привилегированности команд
|
009
|
024
|
SD
|
трассировка
|
010
|
028
|
SD
|
эмулятор
|
011
|
02C
|
SD
|
эмулятор
|
012
|
030
|
SD
|
резерв
|
013
|
034
|
SD
|
резерв
|
014
|
038
|
SD
|
резерв
|
015
|
03C
|
SD
|
несформированный вектор прерывания
|
016
|
040
|
SD
|
резерв
|
...
|
...
|
...
|
...
|
023
|
05C
|
SD
|
резерв
|
024
|
060
|
SD
|
ложное прерывание
|
025
|
064
|
SD
|
автовектор по приоритету 1
|
026
|
068
|
SD
|
автовектор по приоритету 2
|
027
|
06C
|
SD
|
автовектор по приоритету 3
|
028
|
070
|
SD
|
автовектор по приоритету 4
|
029
|
074
|
SD
|
автовектор по приоритету 5
|
030
|
078
|
SD
|
автовектор по приоритету 6
|
031
|
07C
|
SD
|
автовектор по приоритету 7
|
032
|
080
|
SD
|
TRAP #0
|
033
|
084
|
SD
|
TRAP #1
|
...
|
...
|
...
|
...
|
047
|
0BC
|
SD
|
TRAP #15
|
048
|
0C0
|
SD
|
резерв
|
...
|
...
|
...
|
...
|
063
|
0FC
|
SD
|
резерв
|
064
|
100
|
SD
|
пользовательский вектор прерывания
|
...
|
...
|
...
|
...
|
255
|
3FC
|
SD
|
пользовательский вектор прерывания
|
В распоряжении пользователя находятся вектора с номерами 64-255. Векторы 12. 13, 14, 16-24, 48-63 не доступны и зарезервированы под дальнейшее развитее семейства Motorola. Остальные вектора являются системными.
Каждый вектор (за исключением reset) использует 2 слова для хранения 24-битного адреса перехода на подпрограмму обработки ИС.
Вектору reset необходимо 4 слова, т.к. при этой ИС перезаписывается не только РС но и SSP.
При возникновении ИС процессор автоматически выполняет определенную последовательность действий в режиме супервизора для запуска подпрограммы обработки ИС.
С незначительными изменениями для различных типов ИС, эта последовательность выглядит следующим образом:
1. Текущее значение SR, включая системный и пользовательский байты, сохраняется во временном внутреннем регистре. Затем в системном байте S-бит устанавливается в "1", а Т-бит сбрасывается. Это устанавливает режим супервизора и сбрасывает режим трассировки.
2. Сохраняется адрес возврата в программу путем записи РС в стек супервизора.
3. Сохраняется регистр статуса SR (с неизмененными S и Т битами), который тоже заносится в стек супервизора.
4. Процессор получает номер вектора ИС, вычисляет вектора (адрес перехода) и загружает его содержимое в РС. Это означает, что передал управление подпрограмме данного ИС.
При получении прерывания от внешнего устройства. процессор перед началом обработки ожидает окончания действия текущей команды.
Для иллюстрации последовательности обработки ИС рассмотрим выполнение команды
DIVS #0, D1
Команда записана по адресу 012000, SSP=002456. Очевидная ошибка- деление на ноль. Процессор вырабатывает ИС с вектором 5. На рис 2 показаны регистры и пространство стека супервизора, задействованные в процессе обработки.
Рис.2 Пример последовательности обработки ИС.
Для хранения результатов и получения информации подпрограммы обработки ИС используют регистры и общую память.
Любой процесс обработки ИС должен заканчиваться командой RTE (return from exception), которая восстанавливает значение SR и РС, и таким образом, передает управление прерванной программе.
Надо отметить, что при обработке ИС происходит переход между двумя различными режимами процессора (в случае, если программа, во время которой произошло прерывание, использовала пользовательский режим), причем переход из режима пользователя в режим супервизора может осуществляться только в этом случае. в то время как обратный переход задается программно (рис.3).
Рис.3 Взаимосвязь между режимами МП МС68000.