Среда, 18.10.2017, 19:28
БК-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 в машинных кодах, то, наверное, обратили внимание на ряд файлов, адрес загрузки которых равен 760.
Это - файлы с автозапуском из пускового монитора. Что это значит? Такой файл при загрузке из ПМ без задания адреса при успешном считывании сразу запускается на исполнение. При загрузке в МСД ничего такого не происходит, и запуск производится вручную по известному адресу, как обычно, причем никогда этот адрес не равен 760. Некоторые программы, например, "chess", имеют при этом весьма "хитрый" адрес запуска (37200). Попробуй догадайся!

Но догадаться как раз легко. Как происходит автозапуск?
Драйвер магнитофона перед загрузкой файла заносит адрес возврата в ПМ в стек, а затем переходит к загрузке. Если мы подменим этот адрес на другой, то вместо возврата в пусковой монитор произойдет возврат в этот адрес. А это и есть адрес запуска программы! При загрузке файла из ПМ адрес возврата записан в ячейке 766, значит, туда и нужно занести при загрузке файла адрес запуска. Это можно легко сделать в МСД: МСД при работе не изменяет старшие адреса стека. Затем файл нужно записать на МЛ, задав адрес не более 766. Почему же в таком случае принят адрес 760? Это всего лишь традиция, a кроме того, "круглое" число 760 удобнее, чем 766, в том числе и для подсчета новой длины файла. А можно ли выполнить такую же операцию, т.е. задать автозапуск, для загрузки в МСД?

Помните, мы уже обращались к такому опыту: записывали в ячейку 732 число 100274, и происходил выход в монитор? Да, 732 - ячейка стека, по содержимому которой происходит возврат в МСД из прерываний. Но как же задать автозапуск? Ведь, как только мы запишем какой-либо адрес в ячейку 732, немедленно произойдет переход по этому адресу! Это можно сделать только с помощью специальной программы, которая перед записью файла на МЛ заносит в стек нужный адрес запуска, затем изменяет указатель стека R6 (SP), занеся в R6 число, например, 700 (иначе во время записи драйвер магнитофона изменит содержимое стека!), А уже потом записывает на МЛ файл с адреса 732.
целесообразно занести адрес запуска программы во все ячейки стека, с адреса 732 по 776, при этом обеспечивается автозапуск программы из любого режима. Такие программы для "оснащения" файлов автозапуском существуют, например, copy4, автором которой является Баранов Д. Г., г. Николаев. А если у нас нет специальной программы, можно ли обеспечить автозапуск из МСД? Да. Для этого нужно загрузить программу с МЛ по адресу 1046, записать в ячейки 1000...1044 нужный адрес запуска, и выгрузить программу на МЛ, с адреса 1000, увеличив на 46 ее длину. Но грузить такую программу можно только явно задавая адрес загрузки, равный 732, что не слишком удобно.

Автозапуск - удобная штука!
Особенно, если программа запускается не с адреса загрузки, а с какого-нибудь "хитрого" адреса, например, 1654 (к слову сказать, к такому "хитрому" адресу прибегают обычно тогда, когда хотят "засекретить" программу. Но нас теперь на мякине не проведешь, не правда ли?).
Так вот, не стоит ли "перекроить" все программы под автозапуск? Нет, не стоит! У автозапуска есть и минусы, причем множество!
Прежде всего, автозапуск не годится для тех программ, которые загружаются не с адреса 1000, т.к. для них пришлось бы удлинить файл до адреса 732.
Далее, копировать файлы с автозапуском можно только с помощью специальных программ, или изменив адрес загрузки, но тогда при загрузке копии придется задавать адрес = 732.
Программы с автозапуском не грузятся в отладчик.
Программы с автозапуском "портят" стек, и при выходе в МСД по клавише стоп МСД обычно не выдает знак диалога ¤.
При работе одновременно с несколькими программами автозапуск вообще недопустим, т.к. может испортить все дело. При ошибке чтения программы с автозапуском из МСД, сообщение "ошибка магнитофона" не выдается, а испорченная программа запускается, что, вообще говоря, никуда не годится, т.к. мы не знаем, какая в ней ошибка!
Наименьшее зло произойдет, если программа сразу зависнет, но что, если она будет работать неправильно, а мы этого не будем знать?!

Вот сколько бед несет с собой автозапуск! Так что же, автозапуск - только зло? Опять не всегда! Просто, как во всем, следует соблюдать меру.
Прежде всего, автозапуск из ПМ (задаваемый в ячейке 766) никак не влияет на загрузку и работу программ в МСД, и на его использование можно не налагать никаких ограничений. Автозапуск же из МСД целесообразен только для тех программ, которые реализуют свою функцию однократно, т.е. из них не приходится выходить в МСД по клавише стоп, либо такой выход попросту блокирован. Примером второго рода являются программы "kopir" Ярошенко, и та же copy4. Из них выйти в МСД просто невозможно, они работают до системного сброса. Примеров первого рода больше - это практически любые игры в кодах, выход из которых в МСД не нужен. Кроме того, если даже запустится неправильно считанная игра, катастрофы не будет. Но зато автозапуск из МСД совершенно неприемлем для любых системных или инструментальных программ, обнаружить ошибки в работе которых зачастую очень сложно, а это чревато многими бедами. Кроме того, системные и инструментальные программы по самой своей природе рассчитаны на "управляемый" режим работы, из них часто нужен выход в МСД, загрузка других программ, "холодный" запуск, и т.п.

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

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

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