
Цель работы
Научиться анализировать ход выполнения программы на языке Ассемблера при помощи отладчика TurboDebugger.
Индивидуальное задание
1. Ознакомиться с работой программы LAB2.EXE в отладчике Turbo Debugger.
2. Внести в программу LAB2.ASM изменения согласно заданию Вашего варианта, получить новый файл LAB2.EXE и произвести его тестирование и отладку (при возникновении такой необходимости)
3. Задание(Вариант 8): При выводе результата пробел делать после каждой цифры.
1.Теоретические сведения
Отладчик Turbo Debugger является одним из наиболее популярных отладчиков уровня приложения, обладающим широкими возможностями отладки и удобным интерфейсом пользователя.
Запуск Turbo Debugger осуществляется посредством вызова файла программы TD.EXE (либо TD32.EXE в случае 32-разрядной версии для защищенного режима). В командной строке при вызове Turbo Debugger могут быть указаны параметры, а также имя отлаживаемой программы. В последнем случае Turbo Debugger автоматически загрузит код отлаживаемой программы в память и начнет его выполнение под своим управлением.
После загрузки программы в отладчик, Turbo Debugger отображает окно CPU, в котором можно увидеть,как выполняется программа(Рисунок 1)
Рисунок 1-Окно CPU с выполняемой программой
В большой области виден код . Самый левый столбец — адреса, правее отображаются байты машинного кода, а ещё правее — символическое обозначение команд. Программа размещается в памяти, начиная с адреса 0100h в сегменте кода. В программе всего 6 машинных команд, а за ними в памяти находится случайный мусор (точные значения неизвестны).
Отладчик показывает адреса и значения в шестнадцатеричном виде. В правой части окна CPU отображаются регистры процессора и флаги. В нижней части можно увидеть дамп области памяти и стек. Стек — это специальная структура данных, с которой работают некоторые команды процессора.
Адрес текущей машинной команды определяется регистрами CS и IP, эта команда показана выделенной строкой и стрелкой. Теперь нажав F8, выполнится первая команда.
Дальше стрелка указывает на вторую команду(Рисунок 2). Изменившиеся регистры выделены белым цветом. Регистр AX теперь содержит значение 00FFh (то есть 255, чего и хотели от команды «mov ax,255»). Также изменилось значение регистра IP — оно увеличилось на размер выполненной машинной команды, а именно на 3. Теперь СS:IP указывает на следующую команду.
Рисунок 2- Выполнение второй команды
После повторного нажатия F8. Значение регистра AX увеличилось на 1 и стало равным 0100h (256)(Рисунок 3). Значение IP тоже увеличилось на 1, потому что длина команды «inc ax» — 1 байт. Процессор выполняет программу последовательно, одну команду за другой.
Рисунок 3- Изменение данных, после нажатия клавиши F8
После повторного нажатия клавиши F8(Рисунок 4).Команда NOP ничего не делает. Меняется только значение IP — снова увеличивается на 1.
Рисунок 4- Изменение данных, после нажатия клавиши F8
После повторного нажатия F8(Рисунок 5).Значение BX становится равным AX.
Рисунок 5- Изменение данных, после нажатия клавиши F8