Программирование на Ассемблере
Укажем лишь еще одну особенность: возврат из
обработчиков исключений должен осуществляться по команде RTE (ReTurn from
Exception). Эта команда корректно восстанавливает сохраненные в стеке
регистры и возобновляет работу основной программы. 2.3.3 Прерывания. Обработка прерываний происходит по той же схеме, что и обработка
исключений. Прерывание - это нарушение нормального выполнения программы по
внешнему сигналу. Прерывания делятся на уровни - от 0 до 7, при этом прерывание уровня 7
является наиболее приоритетным. Как уже было отмечено, если возникает
прерывание с уровнем, меньшим чем значение битов I0-I2 регистра SR, то это
прерывание просто игнорируется. Иначе выполняются действия, как при
генерации исключения (сохранение регистров SR, SP и PC и переход к
обработчику, адрес которого берется из соответствующего уровню вектора (см.
предыдущий пункт)). Прерывания оказываются полезными для сингронизации программ с внешними
устройствами (hardware). Например, при нажатии клавиш клавиатуры
генерируется прерывание, обработчик которого распознает нажатую клавишу и
вызывает соответствующие процедуры. Таким образом, в основной программе не
нужно предусматривать проверку состояния клавиатуры, а кроме того,
гарантируется быстрая и правильная реакция на нажатие клавиш. Аналогичный
метод используется и при работе с интерфейсом RS232. Подробнее о прерываниях мы поговорим в следующих разделах, а сейчас лишь
напомним, что как и в случае исключений возврат из обработчика прерываний
должен осуществлятся по команде RTE.
По сути, прерывания и исключения - это одно и то же. Исключения - это
прерывания, которые сигнализируют о какой-либо ошибке (например, деление на
ноль). 2.3.4 Коды условий. Любой язык программирования поддерживает условные операторы. Например,
строчка из BASIC\'а IF D1=2 THEN D2=0 является условным оператором. Чтобы переписать то же самое на ассемблере,
нужно предварительно выполнить операцию сравнения: CMP #2,D1 ;CMP - CoMPare (сравнить) Как же работает сравнение на ассемблере? Команды перехода (ветвления) в языке ассемблера проверяют выполнение
условий из некоторого фиксированного набора.
|