Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорные системы (книга Комаров) / Технология подготовки программ

.doc
Скачиваний:
78
Добавлен:
08.03.2015
Размер:
242.69 Кб
Скачать

194

4. ТЕХНОЛОГИЯ ПОДГОТОВКИ ПРОГРАММ

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

1) создание исходного файла, содержащего текст программы;

2) трансляция программы;

3) компоновка программы;

4) отладка программы.

Для реализации этих этапов персональный компьютер должен иметь соответствующие программные средства. Полная схема подготовки программы приведена на рис.4.1. Рассмотрим выполнение ее отдельных этапов.

4.1. Создание исходного файла программы

Для создания исходного файла может использоваться любой текстовый редактор. В результате на дисковом накопителе компьютера создается файл исходного текста программы, которому, как правило, присваивается имя .asm.

4.2. Трансляция программы

Трансляция программы осуществляется с помощью ассемблера MASM. В результате трансляции могут быть получены три файла: объектный файл .obj, файл листинга .lst и файл перекрестных ссылок .crf. При этом объектный файл создается всегда, а файлы листинга и перекрестных ссылок  по желанию программиста.

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

Для программиста основную информацию о программе содержит листинг. В его правой части приводится исходный текст программы, а в левой  результат его трансляции (адреса и коды команд в 16-ричной форме). Перемещаемые адреса в листинге помечаются буквой R. В заключительной части листинга приводится таблица символьных имен, использованных в программе. При этом для сегментов указывается их объем в байтах, а для переменных и меток  все их атрибуты. Завершается листинг сообщением о количестве грубых ошибок и предупреждений. В точках возникновения ошибок в листинге имеются соответствующие поясняющие сообщения.

Рис. 4.1. Схема подготовки ассемблерной программы

Файл перекрестных ссылок содержит информацию о номерах строк, в которых определен и используется каждый идентификатор программы. Однако, эта информация представлена во внутренней машинной форме, недоступной для чтения. Для ее преобразования в текстовую форму файл .crf необходимо обработать программой CREF. В результате этого создается файл .ref, содержащий всю информацию о перекрестных ссылках в текстовой форме. При этом номер строки, в которой идентификатор определен, помечается символом #, а все остальные числа являются номерами строк, в которых имеются ссылки на него. Листинг перекрестных ссылок позволяет контролировать положение каждого идентификатора в программе, что упрощает ее отладку.

Формат командной строки вызова ассемблера для трансляции программы имеет вид:

MASM {Имя_исходного_файла},{Имя_объектного_файла},

{Имя_файла_листинга},{Имя_файла_перекрестных_ссылок},{/Ключи}{;}

На практике ассемблер, как правило, вызывается следующим образом:

1) MASM  в этом случае имена всех входных и выходных файлов запрашиваются в диалоговом режиме;

2) MASM Имя_исходного_файла,,,,  в этом случае входной диалог отсутствует, и транслируется указанный файл .asm с формированием всех выходных файлов .obj, .lst и .crf;

3) MASM Имя_исходного файла;  в этом случае входной диалог также отсутствует, и транслируется указанный файл .asm с формированием только объектного файла .obj.

Ключи командной строки позволяют уточнить режим трансляции программы. Важнейшими из них являются:

D  поместить в листинг диагностические сообщения после первого прохода текста программы; это дает более глубокую диагностику исходного текста, так как многие ошибки первого прохода исправляются на втором и в листинг без этого ключа не попадают;

ML  установить различие между строчными и прописными буквами в идентификаторах программы; при отсутствии этого ключа строчные буквы автоматически преобразуются в заглавные.

Пример 4.1:

Транслировать исходный файл SORT.asm

MASM SORT,,,,  трансляция с созданием файлов SORT.obj, SORT.lst и SORT.crf.

MASM SORT;  трансляция с созданием только файла

SORT.obj.

MASM SORT/D;  трансляция с созданием только файла

SORT.obj с глубокой диагностикой исходного текста на ошибки.

4.3. Компоновка программы

Объектный файл .obj, полученный в результате трансляции, не может исполняться, так как содержит перемещаемые адреса операндов. Для получения исполняемого файла все эти адреса должны быть определены.

Перемещаемые адреса операндов определяются на этапе компоновки программы, выполняемой с помощью редактора связей LINK. В результате компоновки могут быть получены два файла: исполняемый файл .exe и файл распределения памяти .map. При этом исполняемый файл создается всегда, а файл распределения памяти  по желанию программиста.

Редактор связей может объединить в общий исполняемый файл множество объектных файлов, указываемых как по отдельности, так и в составе объектных библиотек, создаваемых библиотекарем LIB.

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

Файл распределения памяти содержит полные сведения о логических сегментах программы. Для каждого сегмента указывается его имя, размер в байтах и класс. Для характеристики класса используются стандартные имена: Code  сегмент программного кода, Data  основной сегмент данных, Extra  дополнительный сегмент данных, Stack  сегмент стека.

Формат командной строки вызова редактора связей на компоновку программы имеет вид:

LINK {Имя_объектного_файла}, {Имя_исполняемого_файла}, {Имя_файла_

_распределения_памяти}, {Имя_файла_объектной_библиотеки} {/Ключи}{;}

Если при компоновке связываются несколько объектных модулей, то они указываются в первой позиции командной строки через знак +.

На практике редактор связей, как правило, вызывается следующим образом:

1) LINK  в этом случае имена всех входных и выходных файлов запрашиваются в диалоговом режиме;

2) LINK Имя_объектного_ файла,,,,  в этом случае входной диалог отсутствует и связывается указанный файл .obj с формированием всех выходных файлов .exe, .map;

3) LINK Имя_объектного_файла1+Имя_объектного_файла2;  в этом случае входной диалог также отсутствует и компонуются два входных файла 1.obj и 2.obj с формированием только исполняемого файла .exe.

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

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

Для исполнения и отладки программы она должна находиться в памяти системы. Загрузка программы из дискового файла .exe в память осуществляется загрузчиком операционной системы.

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

Отладка загруженной программы осуществляется с помощью какого-либо отладчика, позволяющего наглядно наблюдать состояние системы в различных режимах исполнения программы и вносить изменения в нее. Наиболее удобным является отладчик AFD, имеющий экранную форму представления информации и широкий набор функции [11].