Корвет/Компоновщик L80
< Корвет
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. |
�E Компоновщик L80. �F ----------------- Содержание Аннотация........................................ 1. Назначение компоновщика.......................... 2. Обращение к компоновщику......................... 3. Ключи компоновки................................. 4. Сообщения об ошибках............................. Аннотация В настоящем руководстве рассматривается программа - компоновщик L80. Описывается назначение и условия применения программы, позволяющей компоновать перемещаемые модули и созда- вать из них программы готовые к выполнению. 1. Назначение компоновщика Компоновщик создает из перемещаемых модулей программы, готовые к выполнению. Перемещаемые модули получаются в резуль- тате трансляции программ, написанных на на различных языках программирования. 2. Обращение к компоновщику Компоновщик находится на диске в виде файла L80.COM и может быть инициализирован одной из следующих команд: 1) L80 2) L80 "командная строка" В режиме (1) после загрузки компоновщик выводит на экран запрос * и ждет ввода командной строки. В режиме (2) командная строка может состоять из несколь- ких подстрок. Командная строка L80 состоит из списка имен файлов, раз- деленных запятыми, и ключей компоновки. Все эти файлы должны быть загружены компоновщиком.Формат командной строки следующий: Файл 1,файл 2,...,файл N Тип всех файлов - REL. Перед любым именем файла можно задать имя диска, с кото- рого будет загружаться этот файл. По умолчанию файл берется с текущего диска. После выполнения каждой командной подстроки компоновщик, закончив процесс загрузки, выводит список неопределенных сим- волов (неудовлетворенных EXTRN), заканчивающийся *. Кроме того, он выводит адрес начала и конца загруженного файла. Пример. * MAIN DATA 0100 0200 Программа занимает область памяти 100H-200H SUBR1* (SUBR1 не определено) * SUBR1 DATA 0100 0300 Программа занимает область памяти 100H-300H * Для удовлетворения внешних ссылок необходимо осуществить поиск в библиотеке подпрограмм или в библиотеке, созданной пользователем. 3. Ключи компоновки При вводе командной строки можно также задавать различные ключи и с их помощью управлять процессом компоновки. Ключи мож- но вводить: - как отдельные команды; - после имени файла; - в конце командной строки. Ключ Производимое действие ---- --------------------- /R Сброс.Перевод L80 в начальное состояние. /E или Завершение компоновки, выход из L80 и возврат в /E:"имя" операционныю систему. На активном диске в сис- темной библиотеке ищутся имена для удовлетво- рения всех неопределенных ссылок. До выхода в систему L80 печатает три числа: стартовый ад- рес, адрес следующего доступного байта и число использованных страниц (по 256 байт). Если за- дано "имя", то оно будет использоваться как стартовый адрес. "имя" должно быть определено в одном из модулей. /E используют для загрузки скомпонованной программы в память и выхода в систему. /G или Завершение компоновки и выполнение программы. /G:"имя" L80 осуществляет те же действия, что и при ключе /E, но вместо выхода в систему передает управление загруженной программе. Перед запус- ком программы L80 печатается сообщение: BEGIN EXECUTION /N Если задано "имя файла" /N, то программа под заданным именем будет записана на диск. Тип файла будет COM. Этот ключ может быть задан только совместно с ключем /E или /G. /P и /D /P и /D позволяют установить счетчики адреса для следующей загружаемой программы. /P и /D не влияют на уже загруженные программы. Формат ключей: /P:<адрес> или /D:<адрес> где <адрес> - это желаемое значение счетчика адреса в текущей системе счисления (16-ричной по умолчанию; ключ /O устанавливает 8-ричную систему счисления, а /H - 16-ричную). По умол- чанию L80 использует ключ /P:103, оставляя 3 байта для JMP на начало программы. *) Примечание. Не следует использовать /P или /D для загрузки программы, начиная с адреса 100, если только программа не начинает работать с этого адреса. Если ключ /D не задан, то область данных для каждого модуля размещается перед областью про- граммы. Если за дан ключ /D, то области DATA и COMMON загружаются с заданного адреса. Пример. */P:200 Разместить область команд с адреса 200 */R Сброс компоновки */P:200 /D:400 Разместить область команд с 200, а область данных с 400 по F00. /U Вывести начало и конец программы и области данных, а также все неопределенные EXTRN сразу после обработки данной командной подстроки. Ин- формация о программе печатается лишь тогда, когда задан ключ /D. /M Вывести начало и конец программы и области дан- ных, все определенные EXTRN и их значения и все неопределенные EXTRN. /S Для удовлетворения неопределенных EXTRN осуще- ствить поиск в файле, заданном непосредственно перед ключом /S. /X Если задано: имя /N, то /X вызовет создание файла "имя".HEX Примеры: * EX,EX1,EXAM/N/E Загрузить и скомпоновать модули EX.REL и EX1.REL. Создать из них файл EXAM.COM * MYLIB/S,MYSUB,MYPOG/N,MYPROG/M/G Вести поиск EXTRN в файле MYLIB.REL. Загрузить и скомпоновать файлы MYSUB.REL и MYPROG.REL. Создать файл MYPROG.COM. Вывести список всех EXTRN. Выполнить программу MYPROG. Нормальный выход из компоновщика производится по ключу /E или /G. 4. Сообщения об ошибках В процессе работы L80 может выдать следующие сообщения об ошибках: ? NO START ADDRESS Нет стартового адреса. Был использован ключ /G, но основная про- грамма не загружена. ? LOADING ERROR Ошибка загрузки. Последний заданный для компоновки файл не был создан в правильном для L80 формате. ? OUT OF MEMORY Не достаточно памяти. Для загрузки программы недостаточно памяти ? COMMAND ERROR Ошибка в команде. L80 не может опознать команду. ? FILE NOT FOUND Файл не найден. Среди файлов типа REL не найден заданный файл. % 2ND COMMON LARGER /XXXXXX/ Второй COMMON болше. Начальное задание блока COMMON не задало COMMON максимального размера. Следует изменить порядок компоновки или изменить определение COMMON. % MULT.DEF.GLOBAL YYYYYY Многократное определение глобального имени. Одно и то же имя определено как ENTRY в не- скольких модулях. % OVERLAYING PROGRAM AREA, START=XXXX DATA , PUBLIC="символич.имя"(XXXX) , EXTERNAL="символич.имя"(XXXX) Перекрытие программной области. Ключи /P или /D вызовут разрушение уже загруженных данных. ? INTERSECTING PROGRAM AREA DATA Пересечение областей программы и данных. ? START SYMBUL-"имя"-UNDEFINED Не определено имя начала программы. После ключа /E: или /G: символ, заданный в ключе, отсутствует в программе. ORIGIN ABOVE LODER MEMORY< MOVE ANYWAY (J OR N)? BELOW Счетчик адреса за пределами памяти. Загрузить ниже или удалить?