Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции кошкин.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
667.65 Кб
Скачать

Объектный файл 1.Obj

Компоновка

Выполняемый файл 1.Exe

Выполнение

Если нужны изменения

Конец

Рис. 2. Редактирование, ассемблирование, компоновка и

выполнение программы

Turbo Assembler Version 2.0 Copyright (C) 1990 by Borland International Inc. (1)

Assembling file: 1.asm (2)

Error messages: None (3)

Warning messages: None (4)

Remaining memory: 266K (5)

(1) - Турбо Ассемблер, версия 2.0; авторские права фирмы Borland, 1990 г.;

(2) - ассемблирован файл 1.asm;

(3) - сообщения об ошибках: нет;

(4) - предупреждающие сообщения: нет;

(5) - остается памяти: 266К

Если ввести файл 1. asm как показано, то предупреждающих сооб-щений или сообщений об ошибках не будет. При наличии ошибок сооб-щения появляются на экране наряду с номерами строк, где содержатся ошибки. При получении сообщений об ошибках проверьте исходный код (текст) программы и убедитесь, что он выглядит точно так, как исход-ный код в примере, а затем снова ассемблируйте программу. После ус-пешного ассемблирования файла 1.asm выполнен только один шаг в про-цессе создания программы.

Для компоновки программы используется программа TLINK, пред-ставляющая собой поставляемый вместе с Турбо Ассемблером компо-новщик. Введите в командную строку:

TLINK exe.1 obj.

Не обязательно вводить расширение имени файла. TLINK по умол-чанию предполагает, что этим расширением является расширение obj. Когда компоновка завершится (самое большее через несколько секунд), компоновщик автоматически присвоит файлу с расширением exe имя, совпадающее с именем вашего объектного файла (если вы не опреде-лили другое имя). При успешной компоновке на экране появляется со-общение:

Turbo Linker Version 3.0 Copyright (c) 1987, 1990 by by Borland International Inc.

В процессе компоновки могут возникнуть ошибки (в данной про-грамме это маловероятно). При получении сообщения об ошибках ком-поновки (они выводятся на экран) измените исходный текст программы так, чтобы он в точности соответствовал тексту программы в приведен-ном выше примере, а затем снова выполните ассемблирование и ком-поновку. Вы получите новый файл 1 exe. Запустите его. На экран вы-ведется сообщение: 'Это строка результат выполнения программы'

Программа ТLINK, находящаяся в составе DOS, выполняет сле-дующее:

1.Завершает формирование в OBJ-модуле адресов, которые оста-лись неопределенными после ассемблирования.

2.Компонует, если необходимо, более одного отдельно ассемблиро-ванного модуля в одну загрузочную (выполнимую) программу. Воз-можно объединять две или более ассемблерных программ или ассемб-лерную программу с программами, написанными на языках высокого уровня, таких как Паскаль или Си.

3.Инициализирует EXE-модуль командами загрузки для выполне-ния.

После компоновки OBJ-модуля (одного или более) в EXE-модуль можно выполнить EXE-модуль любое число раз. Но, если необходимо внести некоторые изменения в EXE-модуль, следует скорректировать исходную программу, ассемблировать ее в другой OBJ-модуль и вы-полнить компоновку OBJ-модуля в новый EXE-модуль. Даже если эти шаги пока остаются непонятными, вы обнаружите, что, получив немного навыка, весь процесс подготовки EXE-модуля будет доведен до автоматизма.

Для выполнения программ можно также создавать COM-файлы. Примером часто используемого COM-файла является COMMAND.COM. Программа EXE2BIN.COM в DOS преобразует EXE- файлы в COM-файлы. Фактически эта программа создает BIN (двоичный) файл, поэтому она и называется "преобразователь EXE в Вin (EXE-to-BIN)". Выходной Вin-файл можно переименовать в COM-файл. Несмотря на то, что EXE2BIN преобразует EXE-файл в COM-файл, cуществуют определенные различия между программой, вы-полняемой как EXE-файл, и программой, выполняемой как COM-файл.

Размер программы. EXE-программа может иметь любой размер, в то время как COM-файл ограничен размером одного сегмента и не превышает 64К. COM-файл всегда меньше, чем соответствующий EXE-файл; одна из причин этого - отсутствие в COM-файле 512-байто-вого начального блока EXE-файла.

Сегмент стека. В EXE-программе определяется сегмент стека, в то время как COM-программа генерирует стек автоматически. Таким образом, при создании ассемблерной программы, которая будет пре-образована в COM-файл, стек должен быть опущен.

Сегмент данных. В EXE - программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В COM-программе все данные должны быть определены в сегменте кода.

Инициализация. EXE-программа записывает нулевое слово в стек и

инициализирует регистр DS. Так как COM-программа не имеет ни стека, ни сегмента данных, то эти шаги отсутствуют. Когда COM-про-грамма начинает работать, все сегментные регистры содержат адрес префикса программного сегмента (PSP), 256-байтового (100h) блока, который резервируется операционной системой DOS непосредственно перед COM или EXE программой в памяти. Так как адресация начина-ется со смещения 100H от начала PSP, то в программе после оператора SEGMENT кодируется директива ORG 100H.

Для программ в EXE и COM форматах выполняется ассемблирование для получения OBJ-файла и компоновка для получения EXE-файла. Если программа создается для выполнения как EXE-файл, то ее уже можно выполнить. Если же программа создается для выполнения как COM-файл, то компоновщиком будет выдано сообщение:

Warning: No STACK Segment (Предупреждение: Сегмент стека не определен)

Это сообщение можно игнорировать, так как определение стека в программе не предполагалось. Для преобразования EXE-файла в COM-файл используется программа EXE2BIN. Предположим, что EXE2BIN имеется на дисководе С, а скомпонованный файл по имени CALC.EXE - на дисководе B.

Введите EXE2BIN С:CALC,B:CALC.COM

Так как первый операнд всегда предполагает EXE файл, то можно не кодировать тип EXE.

Второй операнд может иметь другое имя (не CALC.COM). Если не указывать тип COM, то EXE2BIN примет по умолчанию тип BIN, кото-рый впоследствии можно переименовать в COM.

После того как преобразование будет выполнено, можно удалить OBJ- и EXE-файлы. Если исходная программа написана для EXE-формата, то можно, используя редактор, заменить команды в исходном тексте для COM - файла. Несоблюдение хотя бы одного требования COM-формата может послужить причиной неправильной работы про-граммы.

Если EXE2BIN обнаруживает oшибку, то выдается сообщение о не-возможности преобразования файла без указания конкретной причины. Необходимо проверить в этом случае директивы SEGMENT, ASSUME и END. Если опущен ORG 100H, то на данные в префиксе программного сегмента будут установлены неправильные ссылки с непредсказуемым результатом при выполнении. Попытка выполнить EXE-модуль про-граммы, написанной для COM-формата, не имеет успеха.

42