Корвет/Компоновщик 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 Счетчик адреса за пределами памяти.
Загрузить ниже или удалить?