Пятница, 15.12.2017, 09:12
БК-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
 Каталог статей
Главная » Статьи » Отладка программ

Отладка программ. Программирование. Компоновка

Не зря этот раздел имеет номер 13! Отладка - самая что ни на есть сложная часть работы с программой. Вот ведь кажется, все верно задумано, и ошибок транслятор не нашел, и метки на месте, а программа не идет, хоть тресни! что будем делать? Это зависит от того, насколько сложна наша программа. Если она сложная, посмотрим, нельзя ли ее разбить на независимые блоки, которые можно отладить отдельно? Нельзя ли ввести лишние команды останова HALT, которые позволят посмотреть, что происходит? Нельзя ли убедиться, что выполняются те или иные подпрограммы, вписав в них дополнительное выведение на экран каких-либо символов? (все это мы потом уберем, только бы найти, в чем дело!).

А отладчик, мы про него забыли? Начнем с него: выйдем из ассемблера, введем отладчик отл2 (асмб2) по адресу 30000 (он перемещаемый) и запустим.
Что он нам даст? Во-первых, мы можем деассемблировать текст программы и посмотреть на нее уже с другой стороны: соответствуют ли переходы нужным адресам, все ли на месте, верно ли записаны адреса меток (не транслятором - программистом!). затем мы можем запустить программу в пошаговом режиме, при этом мы увидим как результат действия операторов, так и сами операторы и операнды, а самое главное - регистры!

Но, если в программе есть длинные циклы, это нам мало поможет: не будешь же нажимать клавишу "Ш" 177777 раз! Но мы можем сократить цикл, изменив содержимое регистров после того, как убедимся, что цикл работает правильно. Но есть еще возможность: мы можем выполнить программу по частям, задавая в нужных местах метку Т, для чего нужно выбрать адрес останова, и приписать его метке Т. Запустив программу, убедимся, что по адресу Т она остановится и вернется в отладчик. можно просмотреть регистры, а затем перенести метку в следующий адрес. Но будьте осторожны! При запуске программы в отладчике нет никакой гарантии, что отладчик или ассемблер не будут испорчены. Поэтому текст программы мы должны иметь на МЛ, и должны запастись терпением на бесконечные вводы ОТЛ2 и МИКРО8 с магнитофона.

Если же нам повезло, и программа не портит ОТЛ2 и МИКРО8, мы можем вернуться в ассемблер прямо из отладчика: 1114G. Никакой разницы мы не заметим, но теперь клавиша стоп не выводит нас в МСД, а переводит в отладчик, а это весьма удобно. Но если при входе в редактор или трансляции программы мы обнаружим несуразности в индикаторе свободных байт МИКРО8 (число в служебной строке), или в таблице меток - текст программы испорчен. дадим директиву RS, а затем директивой LO загрузим текст с МЛ заново. Если же это не помогло, значит, испорчен ассемблер.

Ну вот, главные трудности позади: программа работает так, как мы хотели. Запишем поскорее ее текст на МЛ: как бы не пришлось все начинать сначала! Теперь мы спокойны: что бы ни произошло, текст программы сохранится. подумаем, с какого адреса мы бы хотели нашу программу загружать. лучше всего, если с любого: это дает массу преимуществ, особенно в системных программах - что бы вы сказали, если бы наш отладчик создатели не сделали перемещаемым, а фиксировали его по адресу 1000, как МИКРО8?

Но для создания перемещаемых программ необходимо выполнить ряд условий:
1.Все адреса переходов на текст программы задавать только относительными, т.е. в виде меток.
2.Все буферы данных выделять тоже по меткам, значит, сделать их перемещаемыми.
3.Ко всем ячейкам ПЗУ или системной области обращаться только по абсолютным адресам, а ко всем ячейкам программы - только по относительным.
4.Если программа изменяет векторы прерываний так, что прерывание адресуется к тексту программы, необходимо в начале программы ввести определение адреса загрузки, и вычислить нужный вектор прерывания в зависимости от этого адреса, а уже потом записать этот вектор в системную область.
5.То же самое относится к границам, в которых программа сама себя защищает, если это предусмотрено.
6.Нужно стараться максимально использовать регистры ЦП и стек - они не имеют адресов, и поэтому их работа не зависит от адреса загрузки.

Если вы немного подумаете, то поймете все эти принципы, и сами сможете, возможно, предложить новые. эти принципы носят название принципов позиционно-независимого программирования.

Но далеко не всегда нужно идти на все эти ограничения. Игра, например, может быть без всякого ущерба фиксирована по адресу, к примеру, 12000, который получен в результате трансляции. Если же нужен иной адрес, либо программа настолько длинна, что не может быть оттранслирована за один прием, приходится прибегать к компановке.

Компоновка есть изменение адресов программы таким образом, чтобы она загружалась по нужному нам адресу, либо могла работать вместе с другими программами (модулями). Простейший случай состоит в том, что мы изменяем адрес загрузки. При этом нужно соответственно изменить все абсолютные адреса переходов или обращений к тексту программы, и все относительные - для обращений вовне, к ПЗУ или иным программам. Если же программа перемещаемая, то достаточно просто ввести ее с МЛ по нужному адресу, либо переслать туда директивами МСД. сложнее обстоит дело, если нужно скомпоновать программу из нескольких модулей. В МИКРО8 есть директивы для записи на МЛ объектного модуля, т.е. транслированного текста вместе с таблицей меток, есть и команды для компоновки модулей. Но при этом нужно позаботиться, чтобы все метки во всех модулях имели нужные имена и адреса, чтобы все модули были написаны без ошибок, и т.д. это довольно сложно. По другому способу, можно прибегнуть опять к позиционно-независимому программированию: написать все модули как перемещаемые подпрограммы.

Но и здесь есть свои сложности: не всякую п/программу возможно отладить отдельно от основной программы. Думаем, однако, что все эти проблемы встанут перед читателем еще не так скоро, ведь даже единственный модуль, написанный в МИКРО8, может занимать до 4 кбайт.

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

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

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