Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.orgfree.com

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта 2005

Учебная модель ЭВМ: подсистема прерываний

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

Среди подключаемых ВУ формировать запросы на прерывания могут контроллер клавиатуры и блок таймеров, которым по умолчанию присваиваются вектора прерываний 0 и 2 соответственно. При этом вектор блока таймеров является общим для всех трёх таймеров, при необходимости обработчик прерывания может определить, какой из них вызвал прерывание по значению разрядов регистра SR состояния блока таймеров.

Таблица векторов прерываний располагается в ячейках ОЗУ 100 – 109, таким образом возможно обслуживать до 10 различных векторных источников прерываний. В ячейках таблицы должны располагаться адреса соответствующих программ – обработчиков прерываний. Эти адреса становятся известными после компиляции и заносятся в ячейки «вручную».

При вызове обработчика в стеке сохраняется адрес возврата (текущее значение РС) и значение регистр флагов IF, OV, S, Z. Возврат из обработчика прерывания осуществляется командой IRET, которая восстанавливает значения РС и регистра флагов.

Дисциплина обслуживания прерываний поддерживается с помощью программно-доступных флагов. Флаг IF разрешает/запрещает все прерывания, он устанавливается в «1» командой EI (Разрешить прерывания) и сбрасывается в «0» командой  DI (Запретить прерывания). После RESET процессора IF = 0, поэтому, если предполагается использовать прерывания, следует выполнить команду EI. При вызове любого обработчика IF аппаратно сбрасывается, поэтому если требуется реагировать на другие запросы внутри обработчика прерывания, в его начале следует выполнить команду EI. Команда IRET восстанавливает все флаги, в том числе IF = 1.

В системе команд модели имеются команды INT0 – INT9, которые позволяют программно вызывать обработчики прерываний независимо от значения IF.

На ВУ предусмотрены т.н. «локальные маски», позволяющие запретить/разрешить прерывание от любого источника независимо от остальных (см. описание соответствующих ВУ).

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

МеткаКомандаПримечание
 RD #11; число 11 – в аккумулятор;
 OUT 1; включить клавиатуру и разрешить прерывание от неё;
 OUT 11; включить дисплей в режиме автоинкремента адреса;
 RD #103; передаём в контроллер код команды
 OUT 1 ; Установить S в «1» (режим посимвольного ввода);
 EI ; установить FI в «1» (разрешить прерывания);
M1:   NOP; пустой
 JMP M1 ; цикл;
ОбрПр:   IN 0; считывание введённого символа из буфера в аккумулятор;
 OUT 10 ; передача ASCII-кода на символьный дисплей
 IRET; возврат из прерывания.

Внимание! Адрес обработчика прерывания от клавиатуры (значение метки ОбрПр) необходимо записать в ячейку 100, так как вектор клавиатуры по умолчанию равен 0. Если компилировать приведённую программу с нулевого адреса подряд, то адрес команды IN 0 (начало обработчика) равен 8. Поэтому число 8 следует перед запуском программы записать в ячейку 100.


© Жмакин Анатолий Петрович (Курский государственный университет). anatoly.zhmakin@gmail.com

Оформление Web-страницы - Е.А.Еремин, 2010


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com


Free Web Hosting