Пятница, 15.12.2017, 09:20
БК-0010.01. Повесть о настоящем компьютере
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Категории каталога
Введение в руководство [2]
Введение [0]
Организация БК-0010 [1]
Раздел 1. Организация БК-0010
Работа с МСД [1]
Раздел 2. Работа с МСД
Системные регистры [1]
Раздел 3. Системные регистры
Системное ПО [1]
Раздел 4. Системное программное обеспечение БК-0010
Прерывания. Приоритет ЦП [1]
Раздел 5. Система прерываний БК-0010. Приоритет процессора
Командные прерывания [1]
Раздел 6. Командные прерывания
ЕМТ БК-0010 [1]
Раздел 7. командные прерывания ЕМТ БК-0010
Коды и ассемблер. Мнемокод. [1]
Раздел 8. Коды и ассемблер. Мнемокод. Формат команды
Способы адресации [1]
Раздел 9. Способы адресации
Команды процессора БК-0010 [1]
Раздел 10. Система команд процессора БК-0010
Псевдокоманды. Метки. Комментарии [1]
Раздел 11. Псевдокоманды ассемблера. Метки. Комментарии
Программирование на ассемблере [1]
Раздел 12. Программирование на ассемблере. Начало. Трансляция программ. Ошибки
Отладка программ [1]
Раздел 13. Отладка программ. Позиционно-независимое программирование. Компановка
Подпрограммы ПЗУ БК-0010 [1]
Раздел 14. Подпрограммы ПЗУ БК-0010
Системная область ОЗУ БК-0010 [1]
Раздел 15. Системная область ОЗУ БК-0010. Некоторые секретные сведения об авторе и МП-клубе
Повышение быстродействия БК-0010 [1]
Раздел 16. Вопросы повышения быстродействия БК-0010
Об использовании ПЗУ [1]
Раздел 17. Полезная подпрограмма. Об использовании ПЗУ
Загадочные регистры [1]
Раздел 18. Загадочные регистры
Штурм системной области [1]
Раздел 19. Продолжаем штурм системной области
Об автозапуске программ [1]
Раздел 20. Об автозапуске программ
Коварные программы [1]
Раздел 21. Коварные программы
Еще о системной области [1]
Раздел 22. О пользе плагиата, или еще о системной области
О псевдокомандах и компановке [1]
Раздел 23. Еще раз о псевдокомандах, метках и компановке
Тук-тук, кто в стеке живет? [1]
Раздел 24. Тук-тук, кто в стеке живет?
Фокал с позиций ассемблера [1]
Раздел 25. Взгляд на фокал с позиций ассемблера
Наш опрос
Оцените мой сайт
Всего ответов: 47
 Каталог статей
Главная » Статьи » Командные прерывания

Командные прерывания

Система командных прерываний БК-0010 включает 2 вида таких прерываний: EMT и TRAP.
Никакой принципиальной разницы между ними нет. Просто принято команду ЕМТ использовать в системных программах (для БК - это МСД), а команду TRAP - в программах пользователя.
В полном соответствии с этим принципом написано и СПО БК-0010: если вы диассемблируете МСД, то найдете там множество команд ЕМТ, но ни одной TRAP. Напротив, в фокале широко применяются команды TRAP, а ЕМТ - весьма ограничено: фокал считается программой пользователя.

Что делают эти команды? Если в тексте программы встречается команда прерывания, например, ЕМТ, ЦП поступает так же, как если бы он получил запрос на прерывание от внешних устройств: запоминает в стеке адрес возврата, свое состояние и обращается к вектору 30. Там записан адрес программы обслуживания прерывания.
Но тогда мы сможем обслужить всего 1 вид ЕМТ, их же в БК множество. Как быть?

Каждая команда ЕМТ или TRAP имеет аргумент (здесь уместно сравнение с индексом переменной фокала: переменная одна, но приписывая ей индексы, например, а[1], a[22], мы можем задать массив, т.е. Много переменных по одному имени). Аргументы бывают 0...376, Как для ЕМТ, так и для TRAP. Но коды этих команд разные.
Чтобы получить код команды ЕМТ, нужно прибавить аргумент (или номер) ЕМТ к числу 104000, например, ЕМТ 14 = 104014 (помните, выход в ПМ?).
Для команды же TRAP - прибавить номер к числу 104400, например: TRAP 42 = 104442. Заметим здесь, что разницу между именем (TRAP 42) и кодом (104442) команды мы объясним позже. Пока же нас будет интересовать только имя, а код приведен потому, что это нужно для понимания дальнейшего материала.

Итак, возможно множество прерываний ЕМТ и TRAP, и, очевидно, ЦП различает их по номерам. Как же это делается? Дело в том, что код последней команды всегда хранится в стеке. По прерыванию ЦП записывает туда и другие данные. Но он "знает", где в стеке записана последняя команда.
приступив к обслуживанию прерывания, ЦП снимает со стека копию этой команды, выделяет номер ЕМТ, и по нему находит адрес в специальной таблице, записанной в ПЗУ (номер и адрес строки в таблице находятся в определенном соотношении). А уже в этой таблице в данной строке находится адрес собственно программы обслуживание прерывания (в нашем примере - ЕМТ) с данным номером. Та часть программы, которая выполняет все описанные только что действия, называется е м т (или TRAP) диспетчером.

-Как сложно, зачем все это? - Спросите вы - не лучше ли просто задать переход на подпрограмму?
Все это придумано ради единственной цели: заменить в тексте программы команду из 2 слов (переход к подпрограмме) на одно слово (ЕМТ или TRAP). И все эти сложности, и дополнительные затраты места в ПЗУ, и некоторое снижение быстродействия - все, абсолютно все окупается решением этой задачи, ведь команды ЕМТ и TRAP встречаются в программах не один, а сотни и тысячи раз!
Теперь, зная принципы командного прерывания, мы могли бы сами написать в своей программе TRAP-диспетчер и таблицу адресов, а затем - и подпрограммы обслуживания различных TRAP-ов. Но это разумно только в длинной и сложной программе пользователя, например интерпретаторе языка высокого уровня, ассемблере, и т.п.
В короткой же программе затраты места на TRAP-диспетчер не окупятся. Как быть? Мы можем нарушить традицию, и использовать в своей программе прерывания ЕМТ, для которых в ПЗУ БК-0010 уже есть ЕМТ-диспетчер. Как мы увидим, это предоставляет довольно большие возможности, т.к. разнообразие команд ЕМТ в БК велико. К остальным же подпрограммам будем обращаться по адресу, тратя по 2 слова на команду перехода к подпрограмме. Рассмотрим возможности, которые предоставляет БК-0010 при использовании команд ЕМТ, помня, что принципиально командное прерывание ничем не отличается от перехода к подпрограмме, т.е. при использовании прерываний ЕМТ БК-0010 мы просто используем уже имеющиеся в ее ПЗУ подпрограммы, только обращаемся к таким подпрограммам или их пакетам весьма удобным способом. Как правило, при запросе командного прерывания ЕМТ, для его обработки, помимо номера ЕМТ, требуется еще информация. Она перед прерыванием должна быть помещена в определенные для каждого ЕМТ регистры ЦП. Значит, эти регистры должны быть перед выполнением ЕМТ специально выделены и свободны от иной, кроме нужной нам, информации. В процессе обработки прерывания содержимое остальных регистров, как правило, сохраняется, и по окончании прерывания восстанавливается. Содержимое же регистров, используемых для выдачи информации, нужной для обработки прерывания, нередко изменяется специальным образом, и после прерывания они содержат новую информацию, так сказать, результат прерывания. Итак, для использования в тексте программ командных прерываний ЕМТ нам нужно знать: - номер ЕМТ, и что оно делает; - используемые регистры, и какая исходная информация должна быть в них помещена; - каков результат прерывания, и какая информация о нем может быть получена, и из каких регистров. Исходя из этого и рассмотрим прерывания ЕМТ БК-0010.

Категория: Командные прерывания | Автор: ЗАЛЬЦМАН Ю.А., МП-КЛУБ, г.АЛМА-АТА
Просмотров: 539 | Рейтинг: 0.0/0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Используются технологии uCoz
Форма входа

Поиск
Друзья сайта
Статистика