Министерство образования Российской Федерации
Санкт - Петербургский Государственный Электротехнический Университет "ЛЭТИ"
Кафедра РС
Отчёт по лабораторной работе №3
« Основные приемы поиска и исправления ошибок»
Выполнил: Евстигнеев Е.А. Группа 0105 Факультет:РТПроверил: Смирнов Б. И. |
Санкт – Петербург
2013
Цель работы:
Целью работы является освоения основных приемов отладки программ, написанных на языке ассемблера. Для достижения этой цели необходимо решить следующие задачи:
• ознакомиться с исходным текстом программы L_00.a51, обращая внимание на особенности нового варианта программы,
• освоить методику пошагового прохода программы с трассировкой содержимого регистров и областей памяти, участвующих в работе программного модуля,
• научиться устанавливать динамические и постоянные точки останова (BKPT) с целью прохода фрагмента программы в режиме анимации,
• изучить сложные варианты поиска неисправности путем установки условных точек останова,
• выполнять прогон программы с известными исходными данными,
• произвести поиск ошибок и тестирование вашего варианта программы L2_00.a85
Упрощенная схема алгоритма программы L_00.a85:
1.2. ЗАПУСТИТЬ ТРАНСЛЯЦИЮ ПРОГРАММЫ L_00.A85
Итак, начнем с программы L_00.a85. Запуск варианта с описанными ошибка проиводится последоваетльностью.
Поскольку в программу введены ошибки (ошибки при первой трансляции неизбежны), то далее необходимо обнаружить их в тексте исходной программы и удалить. Последовательность поиска и удаления ошибок (см. рис.1) подробно описаны далее.
Рисунок 1. Ошибки трансляции программы L_00.a85
Как видно из приведенного фрагмента DOS-окна (рис.1), транслятор обнаружил ошибку в строке 45. Тип ошибки — неопределенный символ S. Здесь ошибочно вместо символа "$" введен символ "S" (символ "$" в ассемблерных программах означает текущее значение программного счетчика). Вторая ошибка - неопределенная величина - относится к строке 86.
1.2.1. ИСПРАВИТЬ ОШИБКУ, ОБНАРУЖЕННУЮ В ЛИСТИНГЕ
Чтобы исправить ошибку, обнаруженную в тексте программы, необходимо выполнить следующее:
• закрыть DOS-окно транслятора,
• переключить текущее окно редактора на файл исходного текста программы (файл L_00.a85),
• из меню иконок "UE32" выбрать раздел "Goto line";
• в появившемся окне (рис. 2) ввести номер строки (в нашем случае 45) и нажать кнопку "OK". Курсор установится на указанную строку исходного текста программы;
• исправить ошибку. В строке производится назначение символическому имени STPOINT значения, соответствующего текущему значению счетчика адрес (должен быть знак $);
• сохранить сделанные изменения (командой "Save");
• выполнить повторную трансляцию.
Рисунок 3. Успешное завершение ассемблирования программы L_00.a85
1.2.3. ИССЛЕДОВАНИЕ ЦИКЛА КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ТЕКСТА
Следующий фрагмент содержит наиболее сложную часть программы и должен исследоваться наиболее тщательно. Пошаговый проход следует начать с адреса 004ah, предварительно настроив окна дампа памяти на Buf1 и Buf2. Перед входом в тело цикла (метка LOOP1) содержимое регистров будет: HL = 0800h DE = 0820h
Рисунок 4. Состояние симулятора-отладчика после ввода текста в BUF1.
A = 01, причем это содержимое сохраняется в переменной PASS. Далее в теле цикла производится:
• производится чтение ТБ из буфера Buf1,
выполняется команда SUB A,
• реализуется переход на метку ENDTEXT.
ЭТО ОШИБКА! Цикл не записал ни одного символа в буфер Buf2 и уже перешел на ветвь декодирования. Далее необходимо выяснить, как должен работать этот фрагмент? Почему формируется флаг Z=1? Это может быть выполнена путем анализа текста безошибочного варианта программы L_00.a85 или аналитически, путем собственных рассуждений. Так или иначе, ошибка состоит в том, что установка флага Z без изменения содержимого аккумулятора производится командой ORA A, а не SUB A. Таким образом, возможный вариант исправления - замена команды.
1.2.4ЗАПУСТИТЬ РЕДАКТОР ТЕКСТА ДЛЯ ИСПРАВЛЕНИЯ СЕМАНТИЧЕСКОЙ ОШИБКИ
Этот вариант исправления требует выхода из симулятора-отладчика и явного обращения к текстовому процессору UE32. Для выполнения этого необходимо:
• перейти в главное меню отладчика — <Ctrl+C>;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.