поправка към глава 9.2.2. стр. 20:
ИЗМЕНЕНИЯ И ДОПОЛНЕНИЯ
к документу
"UniASM - руководство пользователя"
1. ИЗМЕНЕНИЯ п.9.2.2. - "SECT"
Второй абзац следует читать:
"Выражение не должно включать
неопределенный или внешний символ. Если
выражение пропущено, секция формируется
с адреса, следующего за последним
адресом, занятым предидущей секцией.
Таким образом можно определить локальные
переменные в нулевой странице каждой
процедуры."
2. ДОПОЛНЕНИЕ к п.9.2.6. - "MAIN"
Директиву MAIN можно применить только
раз и только в одном из связываемых
модулей.
3. НОВАЯ ГЛАВА
11. РЕДАКТОР СвЯЗЕЙ ULINK
11.1. ВЫЗОВ РЕДАКТОРА
Вызов редактора связей осуществляется
командой UniDOS-а:
ULINK [/[c][p]] <modules>
где:
c - опция формирования .CMD выходного
файла, если это возможно. Если опция
пропущена, формируется .PGM файл;
p - опция выравнивания объектных
модулей на границе страницы;
odules - список объектных модулей или
библиотек, которые должны быть связаны в
выполнимую программу. Имена в списке
указываются без расширений. По умолчанию
считается что мудули имеют расширение
имен .OBJ, а библиотеки - .LIB.
В результате работы редактора связей
создается выполнимой файл (программа) с
именем, совпадающем с именем модуля,
содржащего директиву MAIN и с
расширением имени PGM или CMD, в
зависимости от отсутствия или наличия
опции "/c" (см. выше).
11.2. СВЯЗЫВАНИЕ ОБЪЕКТНЫХ МОДУЛЕЙ
Каждый объектный модуль состоит из
сегмента кода и сегмента данных
Сегмент данных следует непосредственно
за сегментом кода и может содержать
ТОЛЬКО неинициализированные данные. Для
создания такого сегмента следует
применить директиву SECT в начале
сегмента данных.
В процессе обработки редактором связей
сегменты кода и данных всех модулей
объединяются, соответственно.
Объединение осуществляется таким
образом, что при загрузке выполнимого
файла сводной сегмент данных
располагается непосредственно после
сводного сегмента кода.
В сводные сегменты кода и данных
включаются только те модульные сегменты
соответствующего типа, к которым
существует обращение.
Если генерируется CMD файл, программа
должна сама проверить существует ли
пространство памяти, достаточное для
размещения сегмента данных. В случае
генерации PGM файла такое соответствие
гарантируется.
11.3. СООБЩЕНИЯ РЕДАКТОРА СВЯЗЕЙ
Диагностические собщения даны в
алфавитном порядке. После перевода
сообщения указаны причины, если они не
очевидны.
Code too large - сводной сегмент кода
длиннее 64Kбайт.
Data too large - сводной сегмент
данных длиннее 64Kбайт.
Error in object table - ошибка в
таблице сдвигов объектного модуля.
File too large - модуль длиннее
64Кбайт.
Invalid entry point - неправильная
точка входа - точка входа CMD файла не
находуится в его начале.
Invalid file format - неправильный
формат объектного модуля.
No entry point given - не указана
точка входа - директива MAIN не введена.
Out of memory - недостаточный
объем свободной памяти.
Read error - ошипка при чтении файла.
Too many entry points - много входных
точек - директива MAIN встечается более
одного раза.
Too many object files - много
объектных файлов - в списке указано
более 256 имен объектных файлов.
Write error - ошибка записи файла.
4. НОВОЕ ПРИЛОЖЕНИЕ B.
ФОРМАТ OBJ-ФАЙЛОВ
адрес содержание
---------------------------------------
$00 (W) $5AA5;
$02 (W) $0001 (номер версии);
$04 (W) число внутренных (ENT)
символов;
$06 (W) число внешних (EXT) символов;
$08 (W) длина сегмента кода;
$0A (L) сдвиг кода с начала файла;
$0E (W) сдвиг точки входа с начала файла
- $FFFF означает, что нет точки
входа;
$10 (W) длина сегмента данных;
$12-$1F 0
$20 - массив внутренных символов;
- массив внешних символов;
- код;
(W) число сдвигов в массиве сдвигов;
- массив сдвигов;
(B) 0.
ЭЛЕМЕНТ МАССИВА ВНУТРЕННЫХ СИМВОЛОВ:
$00-$0F - имя (в ASCIIZ - закончивает на
0);
$10 (W) - значение;
$12 (W) - тип: >= 0 - относительный;
< 0 - абсолютный.
ЭЛЕМЕНТ МАССИВА ВНЕШНИХ СИМВОЛОВ:
$00-$0F - имя (в ASCIIZ - закончивает на
0);
$10 (L) - 0.
ЭЛЕМЕНТ МАССИВА СДВИГОВ:
$00 (B) тип: < 0 - внешний;
>= 0 - не внешний;
бит 0 = LSB;
бит 1 = MSB;
Если оба бита = 1 - WORD;
$01 (W) - значение - если не внешний
символ;
- индекс в массиве внешних
символов - если внешний
символ;
$03 (W) - сдвиг относительно начала
кода. Если сдвиг больше длины
кода, считается что это
элемент сегмента данных.
Элементы массива должны быть
расположены в возрастающем порядке
сдвигов.
5. НОВОЕ ПРИЛОЖЕНИЕ C.
Формат PGM-файлов
адрес содержание
---------------------------------------
$00 (W) $A55A;
$02 (W) число слов таблицы сдвигов;
$04 (W) сдвиг кода с начала файла;
$06 (W) длина кода;
$08 (W) сдвиг входной точки с начала
кода;
$0A (W) длина данных;
$0C-$0F 0
$10 начало таблицы сдвигов байтов
релокации относительно начала
кода.