Основные приемы поиска и исправления ошибок

Страницы работы

Содержание работы

Министерство образования Российской Федерации

Санкт - Петербургский Государственный Электротехнический Университет "ЛЭТИ"

 


Кафедра РС

Отчёт по лабораторной работе №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>;

Похожие материалы

Информация о работе