Методическое пособие для выполнения лабораторных работ и КР (1075934), страница 6
Текст из файла (страница 6)
Этипараметры мы рассмотрим ниже.При запуске компилятора в интегрированной оболочке QC25 необходимо выбратьглавный пункт меню “Make” и подпункт “Compile File”. Выход в основное меню выполняется клавишами “Alt+M”, а запуск на компиляцию после этого может быть выполненкомбинацией клавиш “Alt+C”. На рисунке, размещенном ниже, это показано.В процессе компиляции могут быть обнаружены ошибки (Errors) и предупреждения (Warning). Сообщения о них размещаются: на дисплее, в листинге программы или вспециальном окне системы программирования.
Если при запуске компилятора задан параметр “/z”, то будет распечатана та строка, в которой была обнаружена ошибка (см. ниже). В этом примере я сознательно внес ошибку в команду “PUSH CS” => “PASH CS”,Команды “PASH” нет в языке Ассемблера.
На экран в командной строке появитьсяследующее сообщение (оператор и диагностические сообщения выделены жирным текстом):C:\BORLANDC\TASM>tasm /z /zi /l first.asm↵Turbo Assembler Version 3.1 Copyright (c) 1988, 1992 Borland InternationalAssembling file:first.asmPASH CS**Error** first.asm(6) Illegal instructionError messages:1Warning messages: NonePasses:1Remaining memory: 414k2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”20При работе в среде оболочки QC25 диагностические сообщения появляются вотдельеом окне, а строка исходного текста выделяется цветом (у нас зеленым).При выделении конкретной ошибки, а их при компиляции может быть обнаруженонесколько, выделяется только тот оператор, при ассемблировании которого даннаяошибки была обнаружена (Отмечу, что, к сожалению, эта строка не всегда совпадает сдействительным местом ошибки – вспомните отсутвие “;” в конце оператора на СИ).При компиляции выдаютмя предупреждения, которые требуют вниманияпрограммиста, но не обязательно являются ошибками.
Уровень (степень серьезности)предупреждений, формируемых компиляторами может быть установлен специальнымипараметрами режимами. Для TASM эти параметры имеют следующий вид:/w0, /w1, /w2 - формирование компилятором уровня предупреждений: w0=нет, w1=w2=включены/w-xxx, /w+xxx Отключить (-) или назначить (+) предупреждения с номером xxxПри запуске компилятора программы с предупреждениями мы получим:Assembling file:first.asmLET2 DB*Warning* first.asm(4) Missing operand - trailing ? assumedError messages:NoneWarning messages: 1В данном примере переменная LET2 (я специально ввел эту строку с ошибкой) неимеет начального значения (она не инициализирована). Компилятор формирует предупреждение (*Warning* - выделено жирным шрифтом), но компиляцию завершает успешно.
Число предупреждений указывается в последней строке. Уровень выдачи сообщенийАссемблера в QC25 настраивается в специальном окне настроек компилятора.2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”21Для этого нужно в главном меню выбрать пункт “Options” затем подпункт “Make”и в окне позицию “Assembler Flags”. Установка режимов “Warn Level” в нужную позицию позволяет задать требуемый уровень предупреждений. Отметим также, что в этомокне могут быть выполнены и другие настройки компилятора, например, включение иливыключение режима формирования листинга Ассемблера.О листинге программы и его составляющих речь пойдет ниже.
Здесь мы только отметим, что компилятор формирует листинг Ассемблера в отдельный файл, который можно просмотреть в обычном текстовом редакторе и распечатать при необходимости.Пример листинга нашей простейшей программы приведен ниже:Turbo Assemblerfirst.asm12345данных DS67891011121314151617Version 3.10000Page 1MYCODE SEGMENT 'CODE'ASSUMECS:MYCODE, DS:MYCODELET DB 'A'START:; Загрузкасегментногорегистра0000000141000100020E1F00030005000AB4 022E: 8A 16CD 21000C000E00100012B0 00B4 4CCD 21Turbo AssemblerSymbol Table24/02/09 12:46:17PUSH CSPOP DS; Вывод одного символа на экранMOV AH, 020000rMOV DL, LETINT 21H; Выход изпрограммыMOV AL, 0MOV AH, 4CHINT 21HMYCODE ENDSEND STARTVersion 3.1Symbol NameType??DATE??FILENAME??TIMEText24/02/09 12:46:17ValueText"24/02/09""first"Text"12:46:17"Page 2222010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”??VERSIONNumber 030A@CPUText0101H@CURSEGTextMYCODE@FILENAMETextFIRST@WORDSIZEText2LETByteMYCODE:0000STARTNearMYCODE:0001Groups & SegmentsMYCODEBit Size Align16 0012 Para#4#317Combinenone10ClassCODEЛистинг программы условно разделен на четыре части (я условно разделил их цветом заполнения): заголовок, текст программы, таблица переменных и описание сегментов.В заголовке (Turbo AssemblerVersion 3.1) указывается версия компилятора идата компиляции.В часть текста программы помимо операторов программы включено: имя компилируемого модуля (первая строка - first.asm), номера строк после компиляции (первая колонка), смещение операторов и данных в оперативной памяти, вычисленное с учетомдлинны команд и данных (вторая колонка) и машинное представление команд и данных(третья колонка).
Эта информация очень полезна для программиста при отладке.В таблицу переменных включаются: имена переменных и меток программы (у насэто LET и START) с указанием сегмента и смещения в программе. Кроме того здесь выделены предопределенные переменные, которые доступны в программе (такие как -@CPU ,@FILENAME и другие).В части описания сегментов дается описание сегментов программы и их свойств (внашем случае сегмент - MYCODE). Наш сегмент имеет размер 12 байт, Выровнен на границу параграфа (Para – 16 байт) и входит в класс CODE.Листинг Ассемблера в QC25 также формируется и может быть просмотрен в отдельном окне, сохранен в виде файла и распечатан. Для доступа к листингу нужно в главном меню выбрать позицию “View” “Show Listing…”. После этого в окне редактированиямы можем наблюдать листинг программы, полученный после компиляции.Данный документ может быть сохранен в виде отдельного файла или распечатан.Нужно иметь виду, что процедуры распечатки настроены на версии ДОС и, скорее всего,на матричные принтеры, которые уже вышли из употребления, поэтому желательно сохранить данный листинг в файл, выполнить процедуру перекодировки (см.
выше) и затемраспечатывать.2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”233.3. Запуск на редактирование связей программы АссемблераВторой фазой создания программы является редактирование связей между модулями. Иногда этот процесс называют редактирование внешних связей. Данная операцияпоказана на рисунке, расположенном выше. Основной смысл такой операции заключаетсяв объединении множества объектных модулей в единый исполнимый модуль и контроль“разрешения/раскрытия” внешних ссылок/связей. Под внешними ссылками мы понимаемследующее:− Один объектный модуль напрямую использует данные (переменные) из другогообъектного модуля.
В этом случае он должен знать адрес этой переменной в общемисполнимом модуле и тип данных, который ей соответствует.− Один объектный модуль вызывает процедуру из другого объектного модуля. Вэтом случае он должен знать адрес этой процедуры в общем исполнимом модуле испособ ее вызова.Для выполнения редактирования связей могут быть использованы следующие программные компоненты, в зависимости от выбранной системы программирования:TLINK.EXE (TASM), LINK.EXE (MASM) и QLINK.EXE (QC25). В интегрированной оболочке QC25 редактор связей вызывается неявно на основе параметров, настроенных вспециальном окне.Запуск редактора связей (или, по-другому, компоновщика) в системе программирования TASM основан на следующих правилах:>TLINK[.EXE][<множестворежимов>]<списокобъектныхмодулей>[,<исполнимый модуль>] [,<карта связей>] [,<список библиотек>]Где:− TLINK[.EXE] – название исполнимого модуля редактора связей.
При непосредственном запуске и при запуске из командного файла путь к модулю должен бытьопределен.− <множество режимов> - множество режимов - параметров работы редактора связей, разделенных пробелами. Каждый режим начинается служебным символом ‘/’ иимеет символьное значение.− <список объектных модулей> - перечень объектных модулей, подлежащих включению в общий исполнимый модуль.
Имена файлов модулей должны разделятьсяпробелами. Для указания большого числа модулей может быть указан текстовыйфайл подсказки, имени которого должен предшествовать символ “@”. Например:@mod_list.rsp, содержащий перечень редактируемых объектных модулей. Данныйфайл может иметь следующее содержание:/t +mod1.obj mod2.obl +mod3.obj +mod4.objПримечание: знак “+” используется для продолжения списка на следующуюстроку. Отметим также, что длина командной строки не может превышать 128символов, а при редактировании сложных проектов число модулей может бытьбольшим, поэтому трудно обойтись без таких файлов.
Обратим внимание также нато, что данный список не может быть пустым, хотя бы один объектный модульдолжен быть использован для создания исполнимого модуля. В файл подсказкидопускается включать также режимы настройки редактора связей и другие параметры.− <исполнимый модуль> - имя исполнимого модуля, создаваемого компоновщиком.Если этот параметр не указан, то имя исполнимого модуля задается на основе пер-2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”24вого объектного модуля в списке, а его расширение зависит от режима редактирования: “.COM” для параметра “/t” и “.EXE” в других случаях.− <карта связей> - имя создаваемого специального текстового файла (.МАР) содержащего результаты процесса редактирования связей.
Компоновщик создает такойфайл, если указан параметр ‘/m’.− <список библиотек> - перечень библиотек объектных модулей, их которых автоматически должны выбираться объектные модули для разрешения недостающихмодулей при разрешении внешних связей. Библиотеки могут быть стандартными ипользовательскими. Библиотеки друг от друга разделяются пробелами. При подключении модулей из библиотек не должны возникать неоднозначности (одинаковые внешние имена в различных подключаемых модулях). Вместо списка библиотек, как и в случае со списком объектных моделей, может быть использован файлподсказки (Например: @list_lib.txt), правила, записи которого аналогичны. Допускается использование нескольких файлов подсказки одновременно при одном запуске редактора связей.Пример запуска TLINK из командной строки выполняется так (на примере системыпрограммирования TASM):C:\BORLANDC\TASM>tlink.exe /v /l /m first.obj , first.exe , first.map↵Здесь в строке запуска редактора связей введены: имя исполнимого модуля компоновщика (tlink.exe), настройки-режимы редактора связей (/v /l /m) и имя модуля подлежащего редактированию (в нашем случае - first.obj), имя создаваемого исполнимого модуля (в нашем случае - first.exe) и имя файла карты памяти (first.map).При успешном редактировании связей создается исполнимый модуль, а на экранформируются следующие сообщения:C:\BORLANDC\TASM>tlink.exe /v /l /m first.obj , first.exe , first.map↵Turbo Link Version 5.1 Copyright (c) 1992 Borland InternationalWarning: No stackВ первой строке указывается версия редактора связей, используемая в нашем случае (Turbo Link Version 5.1 …), а во второй строке выдается предупреждение (Warning)о том, что явно в программе не объявлен сегмент стека, он будет использован по – умолчанию.