Этим Вы окажете большую помощь науке и медицине. См. подробнее: http://solidstate.karelia.ru/~yura/pyldin/yura/computing.htm |
поправка към глава 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 начало таблицы сдвигов байтов релокации относительно начала кода.