Turbo Assembler Version 4.1 Copyright (C) 1988,1996 Borland International
Assembling file: Hello.asm Error messages: None Warning messages: None Passes 1 Remaining memory: ***K Из сообщения следует, что ассемблирование завершено без ошибок и отсутствия предупреждений. Предупреждение не является ошибкой, однако его игнорирование может привести к неприятностям в дальнейших этапах работы с программой, поэтому лучше своевременно реагировать на данный тип замечаний. Для компоновки программы введите в командную строку: tlink hello.obj. Здесь, также как и при ассемблировании, расширение имени obj не является обязательным. По завершению компоновки будет сформирован файл hello.exe с выводом на экран сообщения. Turbo Linker Version 7.1. 30.1 Copyright (C) 1987, 1996 Borland International Теперь программу hello.exe можно запустить на исполнение, результатом которого будет вывод на экран сообщения: Это время после полудня? (Да/Нет-Y/N) Курсор будет мерцать после последнего символа в ожидании ввода ответа. Введите букву y. Программа ответит: Здравствуйте! Если будет введена строчная буква n, то программа ответит: Доброе утро! В процессе ассемблирования или компоновки вы можете выбирать различные исполнения процесса, которые задаются опциями в командной строке Tasm или Tlink. Для вывода списка опций командной строки Turbo Assembler наберите tasm и нажмите < Enter >; то же самое проделайте с командой tlink. Опции описываются одной или несколькими буквами. Для задания опции наберите косую черту (или дефис) и соответствующую букву между командой tasm или tlink и именем программы, которую вы ассемблируете либо компонуете. Например, для ассемблирования программы Hello.asm и получения файла с листингом (файл, в котором содержится описание процесса ассемблирования), используйте команду: tasm/l hello. Опции разрешается набирать как прописными, так и строчными буквами. Исполните эту команду и затем рассмотрите файл с листингом Hello.lst, используя текстовый редактор. В листинге каждая строка начинается с номера, затем следуют байты объектного кода и, наконец, собственно текст программы. Кроме того, TASM выводит в файле листинга таблицу идентификаторов, где содержится информация о метках и сегментах, включая значение и тип каждой метки и атрибуты каждого сегмента. При ассемблировании программы вы можете использовать в одной командной строке несколько опций, разделяя их косыми чертами. Рассмотрим некоторые примеры для команды tasm: tasm/l/c hello – команда дополняет файл листинга таблицей перекрёстных ссылок, в которой указывается, где была определена каждая метка и где на неё есть ссылка; tasm/l/n hello – исключает таблицу идентификаторов из листинга; tasm/ml – включает различие прописных и строчных символов в пользовательских идентификаторах; tasm/zi hello – команда добавляет в Hello.obj информацию, необходимую для использования отладчика Turbo Debugger. Для команды tlink: tlink/v hello – опция /v включает в Hello.exe информацию, необходимую для последующего открытия этого файла в отладчике Turbo Debugger; tlink/m hello – опция /m приводит к созданию файла отображения или файла загрузки Hello.map. В нём перечисляются имена, адреса загрузки и размеры всех сегментов, входящих в программу; tlink/x/v hello – команда даёт возможность загрузить Hello.exe в отладчик Turbo Debugger, запрещает создание (опция / x) файла отображения. Tlink/3 < file_name.obj> – компоновщик создаёт файл типа .exe с поддержкой 32-битного кода. Tlink/t < file_name.obj> – опция /t создаёт файл типа .com. 6.2.4. Структура программы для.exe- и.com-файлов. Программы, выполненные под управлением DOS, могут принадлежать к одному из двух типов, которым соответствуют расширения имён программных файлов. com и. exe. Основное различие этих программ заключается в том, что программы типа. com состоят из единственного сегмента объёмом в 64 Кбайт, в котором размещаются программный код, данные и стек, а в программах типа. exe для каждого из них выделяются отдельные сегменты. Управление сегментами – один из наиболее сложных аспектов программирования на языке ассемблера. При этом ассемблер имеет не один, а целых два набора директив управления сегментами [5, 6, 8, 13, 14]. Первый набор, включающий упрощенные директивы определения сегментов, позволяет достаточно просто ими управлять и идеально подходит для компоновки ассемблерных модулей с языками высокого уровня (Pascal и Си). Второй набор, включающий стандартные директивы определения сегментов, предназначен для построения сложных ассемблерных программ. В данном лабораторном практикуме, как правило, применяются упрощенные директивы, введение которых возможно лишь с одновременным указанием используемой модели памяти. В свою очередь, модель памяти неявно задаёт атрибуты упрощенных директив, определяющих действия компоновщика Turbo Linker при формировании исполнительного файла программы (см. табл. 1.1). Дадим краткую характеристику указанных в табл. 1.1 атрибутов. Таблица 1.1
|