Скачиваний:
23
Добавлен:
11.05.2015
Размер:
998.91 Кб
Скачать

8.9. Получение выполняемого файла

Следующим этапом после завершения написания программы (ее кодирования), является этап ассемблирования и выполнения. То есть необходимо перевести программу, написанную на языке ассемблера, в последовательность инструкций, понимаемых процессором.

У существующих реализаций ассемблера нет интегрированной среды, подобной интегрированным средам Turbo Pascal или Visual C++. Для ввода кода программы, ее трансляции и отладки необходимо использовать отдельные служебные программы.

Рассмотрим работу с пакетом ассемблера фирмы Borland — TASM 3.0 или выше. На этапе трансляции программы формируется объектный модуль, который включает в себя представление исходной программы в машинных кодах и некоторую другую информацию, необходимую для отладки и компоновки его с другими модулями. Формат командной строки для запуска TASM.EXE следующий:

TASM [опции] имя_исходного_файла [, имя_объектного файла] [,имя_файла_листинга] [,имя_файла_пререкрестных_ссылок]

Получить справку о формате командной строки и значениях параметров можно, запустив tasm.exe без аргументов. Командная строка запишется:

TASM.ЕХЕ prog1.asm, prog1.obj, prog1.lst, prog1.crf

Обязательным аргументом командной строки является только имя_ исходного_файла. Если последующие аргументы не заданы, то соответствующие файлы не будут созданы. Если имена файлов листинга, объектного и перекрестных ссылок совпадают с именем исходного файла, то нужно просто поставить запятые вместо имен этих файлов, и они будут созданы по умолчанию:

tasm.exe prg_1 , , , ,

Если имена не должны совпадать, то нужно явно указать имена соответствующих файлов:

tasm.exe prоg1 , ,prg_lst, ,

Будут созданы файлы prg_1.obj, prg_lst.lst, prg_1.crf.

При необходимости выборочного созданий файлов вместо ненужных файлов необходимо подставить параметр «nul».

После того, как вы ввели программу, необходимо ее оттранслировать. В результате на экране вы получите последовательность строк. Самая первая из них будет информировать вас о номере версии пакета TASM, который использовался для трансляции. Далее идет строка, содержащая имя транслируемой программы. Если ваша программа содержит ошибки, то транслятор выдаст на экран строки сообщений, начинающиеся словами «Error» и «Warning».

Наличие строки с «Error» говорит о том, что у вас в программе есть недопустимая, с точки зрения синтаксиса, комбинация символов. Наличие строки «Warning» означает, что конструкция синтаксически правильна, но не соответствует некоторым соглашениям языка, и это может послужить источником последующих ошибок.

Для устранения ошибки необходимо определить место ее возникновения и проанализировать ситуацию. Место ошибки легко определяется по значению в скобках в сообщении об ошибке. В них указывается номер строки, содержащей ошибку. Запомнив его, необходимо перейти в файл с исходной программой и по номеру строки найти ошибку.

Вторым способом определения места возникновения ошибки является использование информации из создаваемого транслятором файла листинга. Этот файл имеет расширение *.lst .

Ниже приведен файл листинга для написанной выше программы.

[файл листинга]

Файл листинга содержит код ассемблера исходной программы. Для каждой команды указывается ее машинный код и смещение в кодовом сегменте. В конце листинга формируются таблицы, которые содержат информацию о метках и сегментах, используемых в программе. Если есть ошибки или сомнительные участки кода, то сообщения о них включаются в конец листинга. Эти же сообщения включаются в текст листинга непосредственно после ошибочной строки.

Строки в файле листинга имеют следующий формат:

<глубина_вложенности><номер_строки><смещение><маш._код><исходный_код>,

где глубина_вложенности — уровень вложенности включаемых файлов или макрокоманд в файле;

номер_строки — номер строки в файле листинга. Он не всегда совпадает с номером строки в исходном файле;

смещение  смещение в байтах текущей команды относительно начала сегмента кода. Смещение вычисляет транслятор для адресации в сегменте кода;

машинный_код — машинное представление команды ассемблера, представленной в поле <исходный_код>;

исходный_код — строка кода из исходного файла.

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

После устранения ошибок и получения объектного модуля необходимо создать исполняемый файл или, как еще говорят, скомпоновать программу. Главная цель этого процесса — преобразование кода и данных в объектном файле в их перемещаемое выполняемое отображение. Процесс создания исполняемого модуля разбит на два шага — трансляцию и компоновку для получения возможности объединения нескольких моделей, написанных на одном или нескольких языках программирования, в единую исполняемую программу.

Формат командной строки для запуска компоновщика следующий:

TLINK [опции] список_объектных_файлов [,имя_загрузочного_модуля] [,имя_файла_карты] [,имя_файла_библиотеки],

где опции — необязательные параметры, управляющие работой компилятора;

список_объектных_файлов — обязательный параметр, содержащий список компонуемых файлов с расширением *.obj . Имена файлов должны быть разделены пробелами или знаками «+»;

имя_загрузочного_модуля — необязательный параметр, обозначающий имя целевого исполняемого файла. Если оно не указано, то имя исполняемого файла будет совпадать с именем первого указанного объектного файла;

имя_файла_карты — необязательный параметр, наличие которого обязывает компоновщик создать специальный файл с картой загрузки, в которой перечисляются имена, адреса загрузки и размеры всех сегментов, входящих в программу;

имя_файла_библиотеки — необязательный параметр, содержащий имя библиотеки. При помощи утилиты tlib.exe можно объединить часто используемые процедуры в виде объектных модулей в один файл и в дальнейшем указывать его в командной строке компоновщика.

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

В результате получим исполняемый модуль с расширением *.exe . Однако отсутствие сообщений об ошибках на этапах трансляции и компоновки еще не гарантирует правильную и безошибочную работу программы. Поэтому обязательным этапом процесса разработки программы является отладка.

На этапе отладки выполняется контроль правильности функционирования как отдельных участков кода, так и всей программы в целом.

Для отладки программы применяется отладчик Turbo Debugger, входящий в комплект TASM.

Данный отладчик позволяет решить две главные задачи: определить место логической ошибки; определить причину логической ошибки.

К основным возможностям TD относятся: выполнение трассировки программы в прямом направлении, то есть последовательное пошаговое (по одной команде за раз) исполнение программы; выполнение трассировки в обратном направлении; просмотр и изменение состояния ресурсов микропроцессора во время покомандного выполнения программ.

Запуск программы на исполнение в отладчике возможен в одном из 4-х режимов:

  1. режим безусловного исполнения;

  2. выполнение по шагам;

  3. выполнение до текущего положения курсора;

  4. выполнение с установкой точек прерывания.

Для начала процесса отладки необходимо в качестве аргумента утилиты td.exe указать имя исполняемого модуля:

td имя_исполняемого_модуля ,

Вы попадете в рабочее окно Turbo Debugger. После отладки программ запустите ее на исполнение и получите результаты ее работы.

Соседние файлы в папке Введение в вычислительную технику.