Рубрики
Учебный курс

Учебный курс. Урок 3. Turbo Debugger

В предыдущем уроке мы скомпилировали свою первую программу. Пока мы не знаем, что она делает. Чтобы узнать, откроем её в отладчике и шаг за шагом пройдем каждую команду. Прежде всего необходимо запустить отладчик.

Не спешите запускать DOSBox. Сначала еще раз отредактируем dosbox.conf. Предлогаю вернуться в предущий урок, чтобы освежить память про редактирование dosbox.conf и посмотреть, какие записи в нем уже есть.

Найдем и закомментируем строки:

Добавив символ решетки # перед строками cd CWSDPMI/BIN/ и CWSDPMI -p -s-. Получится вот так:

Мы отключает 32-битный хост DPMI, поскольку Turbo Debugger не сможет запустится под 32-битным хостом DPMI и выбросит ошибку 16-bit DPMI unsupported.

Допустим что вы установили Tourbo Debugger в C:\td, тогда в конце файла dosbox.conf добавьте строки:

Сохраните конфигурационный файл и запустите DOSBox. Вы увидите примерно такое окно:

Сообщение означает, что в исполняемом файле нет специальных данных для отладки. Но нам эти данные и не нужны, потому что программа простая и понятная. Нажимаем ОК. Turbo Debugger отображает окно CPU, в котором можно увидеть, как выполняется программа.

В большой области мы видим код нашей программы. Самый левый столбец — адреса, правее отображаются байты машинного кода, а ещё правее — символическое обозначение команд. Программа размещается в памяти, начиная с адреса 0100h в сегменте кода. В нашей программе всего 6 машинных команд, а за ними в памяти находится случайный мусор (точные значения неизвестны).

Обратите внимание, что отладчик показывает адреса и значения в шестнадцатеричном виде. Если вы ещё плохо разбираетесь в системах счисления, советую прочитать сразу 7-ю часть учебного курса «Системы счисления».

В правой части окна CPU отображаются регистры процессора и флаги. В нижней части можно увидеть дамп области памяти и стек. Стек — это специальная структура данных, с которой работают некоторые команды процессора.

Адрес текущей машинной команды определяется регистрами CS и IP, эта команда показана выделенной строкой и стрелкой. Теперь нажмите F8, чтобы выполнить первую команду.

Теперь стрелка указывает на вторую команду. Изменившиеся регистры выделены белым цветом. Регистр AX теперь содержит значение 00FFh (то есть 255, чего мы и хотели от команды «mov ax,255»). Также изменилось значение регистра IP — оно увеличилось на размер выполненной машинной команды, а именно на 3. Теперь СS:IP указывает на следующую команду. Снова нажимаем F8.

Значение регистра AX увеличилось на 1 и стало равным 0100h (256). Значение IP тоже увеличилось на 1, потому что длина команды «inc ax» — 1 байт. Процессор выполняет программу последовательно, одну команду за другой. Ещё раз нажимаем F8.

Команда NOP ничего не делает. Меняется только значение IP — снова увеличивается на 1. Снова F8.

Значение BX становится равным AX. После ещё двух нажатий F8 программа завершается. Закрыть отладчик можно с помощью меню File->Quit. Или же закрыть окно DOSBox 🙂 Когда у нас будет больше собственных скомпилированных программ через меню File можно будет открыть другую программу.

6 ответов к “Учебный курс. Урок 3. Turbo Debugger”

Здравствуйте! Спасибо за статью и блог. У меня возникла проблема при запуске Turbo Debugger’а

Stub error (2003): can’t find dpmi16bi.ovl

Google подсказывает, что этот файл может идти, например, с Turbo Pascal’ем. Но мне кажется, что накатывать TP ради одной ovl — это перебор. Подскажите, пожалуйста, как лучше поступить? Может я что-то делаю не по инструкции

Благодарю за урок, теперь многие непонятые в универе вопросы разъяснились.
Одна просьба, могли бы вы показать еще примеры, как использовать дебаггер?

Здравствуйте, при компиляции файла из блокнота в urbo Debugger’е
«Program linked with wrong linker version». Подскажите, как исправить ошибку, чтобы файл смог скомпилироваться?

Добрый день!

Ошибка говорит, что версия Tourbo Debugger не совместима с версией компоновщика Tlink.

Если вы компилируете программу из курса, такой ошибки быть не должно :)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *