В предыдущем уроке мы скомпилировали свою первую программу. Пока мы не знаем, что она делает. Чтобы узнать, откроем её в отладчике и шаг за шагом пройдем каждую команду. Прежде всего необходимо запустить отладчик.
Не спешите запускать DOSBox. Сначала еще раз отредактируем dosbox.conf. Предлогаю вернуться в предущий урок, чтобы освежить память про редактирование dosbox.conf и посмотреть, какие записи в нем уже есть.
Найдем и закомментируем строки:
1 2 | cd CWSDPMI/BIN/ CWSDPMI -p -s- |
Добавив символ решетки # перед строками cd CWSDPMI/BIN/ и CWSDPMI -p -s-. Получится вот так:
1 2 | #cd CWSDPMI/BIN/ #CWSDPMI -p -s- |
Мы отключает 32-битный хост DPMI, поскольку Turbo Debugger не сможет запустится под 32-битным хостом DPMI и выбросит ошибку 16-bit DPMI unsupported.
Допустим что вы установили Tourbo Debugger в C:\td, тогда в конце файла dosbox.conf добавьте строки:
1 2 3 | mount u c:/td u: td g:/{файл_программы}.com |
Сохраните конфигурационный файл и запустите 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 — это перебор. Подскажите, пожалуйста, как лучше поступить? Может я что-то делаю не по инструкции
Добрый вечер!
В статье про нужный инструмент я упустил эту деталь.
Скачайте файл по ссылке и положите в папку с исполняющими файлами Turbo Debugger.
https://asmbase.ru/uploads/files/tools/DPMI16BI.OVL
Уверен, после этого заработает :)
Благодарю за урок, теперь многие непонятые в универе вопросы разъяснились.
Одна просьба, могли бы вы показать еще примеры, как использовать дебаггер?
В моем недавнем уроке Учебный курс. Урок 9. Сложение и вычитание есть пример с примением отладчика (сложение чисел, работа с дампом памяти).
Здравствуйте, при компиляции файла из блокнота в urbo Debugger’е
«Program linked with wrong linker version». Подскажите, как исправить ошибку, чтобы файл смог скомпилироваться?
Добрый день!
Ошибка говорит, что версия Tourbo Debugger не совместима с версией компоновщика Tlink.
Если вы компилируете программу из курса, такой ошибки быть не должно :)