Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
01юьб тж.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.62 Mб
Скачать

Последовательность создания исполняемого файла

Процесс создания исполняемого файла включает в себя подготовку файла с исходным текстом программы (файл с расширением asm), трансляцию его в файл специального вида, называемого объектным файлом (файл с расширением obj), и, наконец, компоновку полученного объектного файла в исполняемый файл (файл с расширением exe или com). После создания исполняемого файла может потребоваться его отладка.

Ввод исходного текста осуществляется с помощью любого текстового редактора.

В процессе трансляции ассемблер помимо объектного файла может сформировать также файл с листингом программы (файл с расширением lst).

Для реализации процесса создания исполняемого файла фирма Borland предлагает следующие файлы:

    • tasm.exeзагрузочный модуль Turbo Assembler’а. В результате его использования при отсутствии ошибок из файла с исходным текстом программы будет получен загрузочный модуль с полной отладочной информацией в файле с тем же именем и расширением obj, а также файл с тем же именем и расширением lst.

    • tlink.exeкомпоновщик (или редактор связей), связывает объектный файл с библиотечными и другими программами;

    • td.exeзагрузочный модуль отладчика Turbo Debugger’а.

Программный продукт, в котором мы будем работать, позволяет создавать исполняемый файл автоматически.

Отладка программы

Отладчики (debugger) — это вспомогательные программы (утилиты), включаемые в набор инструментальных средств для выполнения отладки других программ. Отладчики предоставляют возможность выполнять программу по шагам, следить за изменениями данных и проверять выполнение условий. В зависимости от уровня языка, которым оперирует отладчик, можно выделить два их типа:

    • отладчики исходного кода дают возможность видеть текст программы на языке высокого уровня, проверять значения отдельных переменных и агрегатов данных, используя их имена.

    • отладчики машинного уровня отслеживают реально выполняемые машинные команды, отображаемые в виде команд ассемблера, позволяют просматривать содержимое ячеек оперативной памяти и регистров процессора.

Отладчики, интегрированные в среду разработки пакетов программ, например, Borland C++, Borland Pascal, относится к первому типу. Рассматриваемый здесь Turbo Debugger относится к отладчикам второго типа.

Наберите текст программы из раздела «Структура программы» и запустите Turbo Debugger, нажав F8.

Рабочее окно Turbo Debugger (рис. 9) состоит из четырёх окон:

  1. окно процессора – CPU;

  2. окно регистров и флагов – Registers;

  3. окно данных − Dump;

  4. окно стека − Stack.

Для запуска окна процессора и остальных окон выберете в меню сверху View+CPU или нажмите Alt+V+C.

В окне CPU (окно №1 на рис. 9) находятся две колонки команд: правая колонка − это команды вашей программы на языке Ассемблер, слева − соответствующие им машинные команды. В свою очередь и окно Registers (№2 на рис. 9) также поделено на две части. В левой его части указано содержимое всех регистров процессора, а в правой части − биты регистра флагов. Остальные окна рассмотрим в следующей работе.

В левом верхнем углу окна CPU первой расположена метка, с которой начинается исполнение программы. Если в исходной программе она называлась start, то здесь к ее имени добавили имя исполняемого файла − i8086 (дается по умолчанию). Ниже располагается код программы.

Рис. 9. Turbo Debugger

Обратите внимание, что первой строчкой кода идет

mov ax, @data

а не

; my first program

Как было сказано выше, на сегмент кода ссылается регистр cs. Во время запуска программы первая ячейка сегмента кода получила адрес 0FA3h (у вас может быть другое значение) − это значение стоит справа от cs в окне Registers.

Первая команда в сегменте кода находится по адресу 0FA3:0000, а иначе cs:0000, где 0000 − это смещение внутри сегмента. После ее выполнения процессор обратится к следующей, которая находится по адресу cs:0003 и т.д.

Значение смещения, соответствующее следующей команде, постоянно хранит регистр ip. Сейчас, пока не была выполнена ни одна команда, регистр ip хранит 0000, т.е. ссылается на первую команду.

Для того чтобы, наконец, выполнить первую команду, нажмите F8.

Для покомандного (пошагового) исполнения программы каждый раз нажимайте F8.

Сразу после исполнения команды регистр ip изменил свое значение на 0003. Кроме этого изменил значение и регистр ax.

Дважды нажмите F8 для исполнения второй и третьей команд. Теперь процессор «знает» адрес сегмента данных, и регистр ds ссылается именно на него. Регистр ax при этом снова стал равен нулю.

После выполнения двух следующих команд поменяют значения регистры al и bx. Затем произойдет переход к метке #i8086#exit (в исходной программе метка exit). Выполните еще две команды, соответствующие стандартному выходу и в появившемся окне нажмите ОК. Для выхода из отладчика нажмите Alt+X.

Когда на черном экране, эмулирующим работу 16-разрядных приложений, появится надпись «Press <Enter> to exit», нажмите Enter.