АССЕМБЛЕР.
РУКОВОДСТВО ПРОГРАММИСТА.
1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ
Данный документ является руководством программиста при трансляции программ, написанных на языке Ассемблер операционной системы ФОДОС-2.
Результатом трансляции может быть:
- объектный модуль (доступный машине логический эквивалент исходного модуля);
- листинг исходного модуля;
- листинг файла таблицы перекрёстных ссылок;
- листинг таблицы содержаний;
- листинг таблицы имён.
Для работы с Ассемблером (MACRO) пользователь должен знать, как:
- вызвать и закончить работу с транслятором MACRO, а также общий формат командной строки транслятора;
- выводить временные рабочие файлы на устройства, которые не приняты по умолчанию, если необходимо;
- используются переключатели спецификации файла для запрещения действия директив управления файлом в исходном модуле;
- интерпретируются коды ошибок.
Ассемблер (MACRO) предназначен для автоматизации программирования на уровне машинно-ориентированного языка. Транслятор переводит программу, написанную на языке Ассемблер (исходный модуль), в объектную программу. Трансляция осуществляется за два прохода. Для трансляции программ с помощью Ассемблера необходимо, чтобы исходные модули находились на устройствах с файловой структурой. Минимальный объём оперативной памяти для работы Ассемблера - 32К байт.
2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ
2.1. Режим работы.
Режим трансляции задаётся введением с терминала командной строки. Формат командной строки:
ОБСПФ,[ЛИСТСПФ],[ПССПФ][/ПРК]=ВХОДСПФ,...,ВХОДСПФ[/ПРК] |
||
где |
обспф |
- спецификация объектного файла (устройство, имя и тип файла). Устройства TT: и LP: для получения объектного файла не используются; |
|
листспф |
- спецификация файла листинга и таблицы имён; |
|
псспф |
- спецификация временного файла перекрёстных ссылок (CREF). Если псспф не указан, листинг таблицы перекрёстных ссылок всё равно создаётся; |
|
/прк |
- один или несколько переключателей (табл. 2); |
|
входспф |
- спецификация входного файла (исходного или файла макробиблиотеки пользователя). |
В командной строке можно указать до шести входных файлов.
Значения элементов спецификаций файлов по умолчанию приведены в табл. 1.
Файл |
Устройство |
Имя файла |
Тип файла |
---|---|---|---|
Объектный |
DK: |
Необходимо указать |
.OBJ |
Листинга |
Устройство, назначенное для объектного модуля |
То же |
.LST |
Перекрёстных ссылок |
DK: |
CREF |
.TMP |
Исходный |
Для первого файла DK: Для последующих - то же, что для предыдущего |
Необходимо указать |
.MAC |
Системная макробиблиотека |
SY: |
SYSMAC |
.SML |
Макробиблиотека пользователя |
Для первого файла DK: Для последующих - то же, что для предыдущего |
Необходимо указать |
.MLB |
Спецификации выходных файлов (объектного файла, файла листинга, временного файла перекрёстных ссылок) не обязательны, т.е. система не создаёт выходной файл, если командная строка не содержит спецификацию данного файла. Часть спецификации файла можно не указывать - см. табл. 1. Система определяет, какой выходной файл должен быть создан при трансляции по положению спецификации файла в командной строке. Если какой-либо выходной файл не надо создавать, в командной строке на месте спецификации данного файла следует указать запятую, но не требуется ставить запятую после спецификации последнего нужного выходного файла.
2.2. Временный рабочий файл.
Если при трансляции таблице имён необходима область памяти большего размера, чем ей отводится, система автоматически создаёт временный рабочий файл WRK.TMP для расширения области таблицы имён.
По умолчанию файл WRK.TMP создаётся на устройстве DK:. Чтобы назначить другое устройство по умолчанию для создания временного рабочего файла, следует подать команду:
.ASSIGN уст: WF
|
||
где |
уст: |
- постоянное имя устройства файловой структуры, куда будет выводиться файл WRK.TMP. |
После данной команды система создаёт файл WRK.TMP на указанном устройстве.
2.3. Переключатели.
Используя переключатели программы Ассемблер, пользователь может запретить действие директив языка Ассемблер исходной программы.
Переключатели, допустимые в командной строке, приведены в табл. 2.
Переключатель |
Назначение |
---|---|
/L:арг |
Определяет формат и содержание листинга; запрещает директиву .NLIST исходной программы |
/N:арг |
Определяет формат и содержание листинга; запрещает директиву .LIST исходной программы |
/E:арг |
Разрешает определённые функции при трансляции и при формировании объектного модуля; запрещает директиву .DSABL исходной программы |
/D:арг |
Запрещает определённые функции при трансляции и при формировании объектного модуля; запрещает директиву .ENABL исходной программы |
/M |
Указывает, что входной файл является файлом макробиблиотеки |
/C:арг |
Определяет содержание таблицы перекрёстных ссылок |
ПРИМЕЧАНИЕ. Переключатель /M действует только на тот файл, за спецификацией которого он следует в командной строке. Все другие переключатели программы Ассемблер могут быть указаны в любом месте командной строки.
Примеры:
1. *DK:BINF.OBJ,LP: = DK:SRC.MAC.
По данной командной строке транслируется файл SRC.MAC и создаётся объектный файл DK:BINF.OBJ, листинг выводится на LP:.
2. *,LP:/C=DK:SRC.MAC
По данной командной строке на LP: выводится листинг, включающий временный файл перекрёстных ссылок.
Ниже описаны все переключатели программы Ассемблер.
2.3.1. Переключатели управления листингом (/L:арг и /N:арг).
Переключатели /L:арг и /N:арг определяют формат и содержание листинга. Аргументы переключателей приведены в табл. 3. Используя данные переключатели, можно запретить во время трансляции действие директив исходной программы .LIST и .NLIST с определёнными аргументами: переключатель /L:арг запрещает действие директивы .LIST арг. Аргументы переключателя и аргументы директивы в этом случае должны совпадать. Описание директив .LIST и .NLIST приведено в документе [2].
Переключатели управления листингом могут использоваться без аргументов: по /L запрещается действие директив .LIST и .NLIST, которые не имеют аргументов; по /N система включает в листинг только таблицу имён, таблицу содержания и сообщения об ошибках.
Пример:
*I,LP:/L:MEB/N:SYM=FILE
По данной командной строке транслируется файл FILE.MAC и на LP: выводится листинг (с шириной строки 132 символа), без таблицы имён (по /N:SYM), но включая операторы макрорасширений, порождающие объектные коды (по /L:MEB), и создаётся объектный файл I.OBJ.
Аргумент |
Действие по умолчанию |
Назначение |
---|---|---|
SEQ |
Разрешает |
Включать в листинг порядковые номера строк исходной программы |
LOC |
-"- |
Печать значения счётчика адреса |
BIN |
-"- |
Печать объектных кодов в восьмеричном виде |
BEX |
-"- |
Печать объектных кодов в восьмеричном виде, расположенных на нескольких строках |
SRC |
-"- |
Печать операторов исходной программы |
COM |
-"- |
Печать комментария |
MD |
-"- |
Печать макроопределений и расширений областей повторений |
MC |
-"- |
Печать макрокоманд и расширений областей повторений |
ME |
Запрещает |
Печать макрорасширений |
MEB |
Запрещает |
Печать операторов макрорасширений, порождающих объектные коды |
CND |
Разрешает |
Печать блоков условной трансляции с невыполненными условиями |
LD |
Запрещает |
Действие директив .LIST и .NLIST исходной программы, в которых нет аргументов |
TOC |
Разрешает |
Печать таблицы содержания |
TTM |
Печать в строку |
Управлять форматом печати объектных кодов и таблицы имён (см. рис. 1) Приведён формат, заданный переключателем /L:TTM |
SYM |
-"- |
Печать таблицы имён |
2.3.2. Переключатели управления функциями (/D:арг и /E:арг).
Переключатели /D:арг и /E:арг позволяют разрешать или запрещать определённые функции во время трансляции и, таким образом, влиять на форму и содержание двоичного объектного файла. Аргументы переключателей приведены в табл. 4.
Используя данные переключатели, можно запретить действие директив исходной программы .ENABLE и .DSABL c определёнными аргументами:
- переключатель /E:арг запрещает действие директивы .DSABLE арг;
- переключатель /D:арг запрещает действие директивы .ENABLE арг.
Аргументы переключателя и аргументы директивы в этом случае должны совпадать. Описание директив .ENABLE и .DSABLE см. в [2].
Пример:
*,LP: = SRCPRG.MAC/E:CDR
По данной командной строке транслируется файл SRCPRG.MAC, листинг выводится на LP:. Вся исходная информация за 72 колонкой рассматривается как комментарий.
Аргумент |
Действие по умолчанию |
Назначение |
---|---|---|
ABS |
Запрещает |
Вывод в абсолютном двоичном формате |
AMA |
Запрещает |
Абсолютные адреса (код метода адресации 67) транслировать как относительные (код метода адресации 37) |
CDR |
Запрещает |
Рассматривать информацию за 72 колонкой как комментарий |
CRF |
Разрешает |
Вывод листинга таблицы перекрёстных ссылок |
FPT |
Запрещает |
Усечение чисел с плавающей запятой без округления (/E:FPT); с округлением (/D:FPT) |
GBL |
Разрешает |
Неопределённые имена транслировать как глобальные |
LC |
Разрешает |
Приём входной информации, содержащей буквы русского алфавита |
LCM |
Запрещает |
Зависимость условных директив .IF IDM и .IF DIF от верхнего и нижнего регистров |
LSB |
Запрещает |
Временно прервать блок локальных меток новой программной секцией, а затем продолжить прерванный блок локальных имён |
MCL |
Запрещает |
Поиск макроопределения во всех макробиблиотеках, если в исходном файле встретился код неопределённой операции |
PNC |
Разрешает |
Включение двоичных кодов в объектный модуль |
REG |
Разрешает |
Переопределение регистров, назначенных по умолчанию |
2.3.3. Переключатель определения файла макробиблиотеки (/M).
Переключатель /M в командной строке следует за спецификацией файла, к которому он применяется, и указывает, что файл, за которым /M следует, является файлом макробиблиотеки. Переключатель /M не имеет аргументов.
Если командная строка не содержит спецификацию системной макробиблиотеки SYSMAC.SML система автоматически включает её в командную строку первым входным файлом.
Если в исходном файле встречается макрокоманда, Ассемблер просматривает все макробиблиотеки в порядке их появления в командной строке. Если макроопределение для макрокоманды с определённым именем содержится в двух или более библиотеках, макроопределение для данной макрокоманды выбирается из библиотеки, которая в строке команды была указана самой правой.
Если макробиблиотека пользователя содержит макроопределение с именем, совпадающим со стандартным именем макроопределения системной макробиблиотеки, то преимущество имеет макробиблиотека пользователя.
Пример:
*выходспф=ALIB.MLB/M,BLIB.MLB/M,XIZ
Предположим, исходный файл XIZ.MAC содержит макрокоманды .MCALL .BIG, а файлы макробиблиотек ALIB и BLIB содержат различные макроопределения макрокоманды .BIG. Система будет включать в файл расширения макрокоманды .BIG из библиотеки BLIB.
2.3.4. Переключатель управления печатью таблицы перекрёстных ссылок (/C:арг).
Переключатель /C:арг предназначен для управления печатью таблицы перекрёстных ссылок (CREF), т.е. переключатель /C:арг определяет содержание данной таблицы. Аргументы переключателя приведены в табл. 5. Обычно /C:арг следует в командной строке за спецификацией файла листинга, но также может быть указан в любом месте командной строки.
Таблица перекрёстных ссылок (CREF) содержит все или часть имён исходной программы.
Если командная строка не содержит спецификацию файла таблицы перекрёстных ссылок, система создаёт временный файл CREF.TMP на DK:. После того, как получена таблица перекрёстных ссылок, временный файл стирается автоматически. Если необходимо вывести файл CREF на другое устройство, следует указать в командной строке уст:псспф (уст - имя устройства, куда будет выводиться файл CREF; псспф - спецификация файла CREF). Используя команду .ASSIGN ycт:CF, можно направить вывод файла CREF.TMP на нужное устройство, не указывая каждый раз при трансляции его в командной строке. Если же псспф в командной строке всё же указывается, то таблица перекрёстных ссылок выводится на указанное устройство файлом, имя которого задано в псспф.
Если листинг надо вывести на MT:, по команде LOAD следует загрузить драйвер MT: в память, а затем выполнять трансляцию.
Пример:
*,LP:,RK1:TEMP.TMP = SOURCE/C
По данной командной строке листинг трансляции выводится на LP:, таблица перекрёстных ссылок файлом TEMP.TMP на RK1:.
Аргумент |
Раздел таблицы перекрёстных ссылок |
---|---|
С |
Имена программных секций |
E |
Ошибки (сгруппированные по типам ошибок) |
M |
Имена макрокоманд |
P |
Постоянные имена (включая команды и директивы) |
R |
Имена регистров |
S |
Имена, определённые пользователем |
ПРИМЕЧАНИЕ. Переключатель /C без аргументов эквивалентен /C:S:M:E. Если необходимо в таблицу перекрёстных ссылок включить определённые разделы, то с переключателем /C указывают соответствующие аргументы. Таблица перекрёстных ссылок не создаётся, если не указан переключатель /C, даже если в командной строке указана спецификация файла CREF.
3. ОБРАЩЕНИЕ К ПРОГРАММЕ
Для вызова Ассемблера MACRO с системного устройства следует подать с терминала команду:
R MACRO <BK>
после того, как монитор напечатает на терминале точку.
После вызова Ассемблер печатает звёздочку и ожидает ввода командной строки. Если в это время нажать клавишу <BK>, то Ассемблер печатает номер своей версии.
Для выхода из MACRO и передачи управления монитору следует подать команду СУ/C, если MACRO ожидает ввода с терминала, или дважды СУ/C, если MACRO выполняет операцию. Для повторного пуска MACRO следует подать команду REENTER.
После выполнения операции MACRO печатает звёздочку и ожидает ввода командной строки.
ПРИМЕЧАНИЕ. Вызвать Ассемблер MACRO можно также по команде монитора MACRO (см. [1]).
4. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
Программа на исходном языке может состоять из одного или нескольких модулей. Каждый модуль транслируется независимо. Результатом трансляции является объектный модуль, листинг и таблица перекрёстных ссылок. Объектные модули обрабатываются программой редактор связей для получения загрузочного модуля.
4.1. Исходный модуль.
Исходный модуль представляет собой последовательность операторов на языке Ассемблер. Описание форматов операторов приведено в документе [2].
4.2. Объектный модуль.
Объектный модуль, полученный в результате трансляции, выдаётся в формате, допустимом для работы в системе ФОДОС-2. Объектный модуль состоит из отформатированных двоичных блоков.
Формат двоичного блока:
Признак начала блока (младший байт - 1) |
Признак начала блока (старший байт - 0) |
Количество байтов в блоке (младший байт) |
Количество байтов в блоке (старший байт) |
Блок информации |
Байт контрольной суммы |
Часть двоичного блока - "Блок информации" содержит фактически информацию объектного модуля. Система ФОДОС-2 использует 8 типов блоков информации. Табл. 6 содержит описание 8 типов блоков информации.
Код типа блока |
Тип блока |
---|---|
1 |
Словарь глобальных имён (GSD) |
2 |
Конец словаря глобальных имён (ENDGSD) |
3 |
Двоичный текст программы (TXT) |
4 |
Словарь перемещения (RLD) |
5 |
Словарь внутренних имён (ISD) |
6 |
Конец объектного модуля (ENDMOD) |
7 |
Заголовок библиотеки |
10 |
Конец библиотечного файла |
В дальнейшем двоичный блок, содержащий словарь глобальных имён, будем называть блок GSD, также и все типы блоков (блок ENDGSD, блок TXT, блок RLD, блок ISD, блок ENDMOD, блок заголовка библиотеки, блок конца библиотеки).
Формат объектного модуля:
Блок GSD |
Блок RLD |
Блок GSD |
Блок TXT |
Блок TXT |
Блок RLD |
. |
Блок GSD |
Блок ENDGSD |
Блок ISD |
Блок ISD |
Блок TXT |
Блок TXT |
Блок TXT |
Блок RLD |
Блок ENDMOD |
Объектный модуль должен начинаться с блока GSD и заканчиваться блоком ENDMOD. Дополнительные блоки GSD могут встречаться в любом месте в файле, но перед блоком ENDGSD. Блок ENDGSD должен быть до блока ENDMOD. По крайней мере, один блок RLD должен предшествовать блоку TXT. Дополнительные блоки TXT и RLD могут встречаться в любом месте файла. Блоки ISD также могут встречаться в любом месте файла между блоками GSD и блоками ENDMOD.
Первый байт блока информации - код типа блока (см. табл. 6).
4.2.1. Блок словаря глобальных имён (GSD)
Блок GSD содержит информацию, необходимую для присвоения адресов именам и распределения памяти задачи. Каждому имени в блоке информации соответствует запись из четырёх слов, содержащая имя в коде RADIX-50 (2 слова), код типа записи и значение имени.
Формат блока информации GSD:
0 |
Код типа блока информации = 1 |
Имя в кодах RADIX-50 |
|
Код типа записи |
Флаг |
Значение имени |
|
Имя в кодах RADIX-50 |
|
Код типа записи |
Флаг |
Значение имени |
|
. |
|
Имя в кодах RADIX-50 |
|
Код типа записи |
Флаг |
Значение имени |
Блок информации блока GSD построен таким образом, что сначала следует информация об абсолютной секции и обо всех её глобальных именах; затем информация об относительной секции (если она есть в программе) и перечисляются все глобальные имена данной секции. Если в программе несколько программных секций, то информация об этих секциях в блоке GSD следует в том порядке, в каком программные секции встречаются в программе. Первый блок GSD содержит информацию об имени модуля.
Типы записей и соответствующие им коды приведены в табл. 7.
Код типа записи |
Значение |
---|---|
0 |
Имя модуля |
1 |
Имя секции управления (CSECT) |
2 |
Внутреннее символическое имя |
3 |
Адрес смещения |
4 |
Глобальное символическое имя |
5 |
Имя программной секции |
6 |
Идентификация версии программы (IDENT) |
7 |
Описание массива отображения (VSECT) |
Ниже описаны все типы записей для блоков GSD.
4.2.1.1. Имя модуля (код типа записи - 0).
Запись имени модуля объявляет имя объектного модуля. В каждом объектном модуле может встречаться только одно объявление каждого модуля.
Формат записи имени модуля:
|
Имя модуля |
|
|
|
|
||
0 |
0 |
||
0 |
4.2.1.2. Имя секции управления (код типа записи - 1).
Запись имени секции управления объявляет имя секции управления. Редактор связей редактирует секцию управления .ASECT и .CSECT (с именем или без него) в относительную программную секцию с признаками, указанными ниже.
Формат оператора .PSECT для неименованной относительной секции:
.PSECT, RW, I, LCL, REL, CON
Формат оператора .PSECT для именованной относительной секции:
.PSECT имя, RW, I, GBL, REL, OUR
Формат оператора .PSECT для абсолютной секции: .PSECT .ABS., RW, I, GBL, ABS, OUR
Формат записи имени секции управления:
|
Имя секции управления |
|
|
|
|
||
1 |
Не используется |
||
Максимальная длина |
4.2.1.3. Внутреннее имя (код типа записи - 2).
Запись внутреннего символического имени объявляет имя, внутреннее по отношению к модулю. T.к. редактор связей не создаёт таблицу внутренних имён, то при редактировании записи внутренних имён игнорируются редактором связей.
Формат записи внутреннего имени:
|
Внутреннее имя |
|
|
|
|
||
2 |
0 |
||
Не определено |
4.2.1.4. Адрес смещения (код типа записи - 3).
Запись адреса смещения объявляет адрес смещения модуля относительно программной секции. Первые два слова записи определяют имя относительной секции. Четвёртое слово указывает относительное смещение от начала относительной программной секции.
Редактор связей передаёт чётный адрес смещения, который в программе встречается первым (с директивой .END), системе как пусковой адрес программы. Если в программе не указан адрес смещения (в этом случае смещение - 000001), или если указан нечётный адрес смещения - программа при загрузке не запускается (запуск может быть осуществлён по команде монитора START).
Формат записи адреса смещения:
|
Символическое имя |
|
|
|
|
||
3 |
0 |
||
Смещение |
4.2.1.5. Глобальное символическое имя (код типа записи - 4).
Запись глобального символического имени объявляет или об обращении к глобальному имени, или об определении глобального имени (запись определения глобального имени). Все записи определения глобальных имён должны следовать в блоке информации блока GSD за записью имени программной секции, но перед записью имени следующей программной секции. Записи обращения к глобальным именам могут быть в любом месте внутри блока информации блока GSD.
Формат записи глобального символического имени:
|
Глобальное символическое имя |
|
|
|
|
||
4 |
Флаг |
||
Значение |
В записи глобального имени: первые два слова - код RADIX-50 глобального имени; четвёртое слово - значение имени относительно программной секции, в которой имя определено.
Байт флага третьего слова определяет обращение к глобальному имени, или указывает, что определение глобального имени, абсолютное или относительное, встретилось в данной программной секции.
4.2.1.6. Имя программной секции (код типа записи - 5).
Запись имени программной секции объявляет имя программной секции и её максимальную длину в модуле. Байт флага используется для объявления определённых свойств программной секции (размер секции, в оверлейном или корневом сегменте расположена секция, вид доступа к программной секции).
Формат оператора .PSECT для программной секции:
.PSECT, RW, I, LCL, REL, CON
Формат записи имени программной секции:
|
Имя программной секции |
|
|
|
|
||
5 |
Флаг |
||
Максимальная длина |
ПРИМЕЧАНИЕ. Для всех абсолютных секций 4-е слово содержит 0.
4.2.1.7. Идентификация версии программы (код типа записи - 6).
Запись идентификации версии программы объявляет версию модуля. Если исходная программа содержит директиву .IDENT, то блок информации блока GSD будет содержать запись идентификации версии программы. Первые два слова записи содержат идентификацию версии. Четвёртое слово и байт флага третьего слова редактором связей не используется.
Формат записи идентификации версии программы:
|
Идентификация версии программы |
|
|
|
|
||
6 |
0 |
||
0 |
4.2.1.8. Имя отображённого массива (код типа записи - 7).
Запись имени отображённого массива объявляет имя отображённого массива, т.е. распределяет память внутри области задания, для отображения массива. Байт флага записи имени отображённого массива резервируется и предполагается, что его содержимое = 0.
Четвёртое слово, длина, содержит число 32-х словных блоков. Если длина равна 0, сегмент - корневой. Не должно быть глобальных имён в секции, адрес базы которой = 0.
Формат оператора .PSECT для программной секции (VSECT):
.PSECT .VIR., RW, D, GBL, REL, CON
Формат записи имени отображённого массива:
|
Имя отображённого массива |
|
|
|
|
||
7 |
Резервируется |
||
Длина |
4.2.2. Блок конца словаря глобальных имён (ENDGSD).
Блок ENDGSD указывает, что в данном объектном модуле больше не содержится блоков GSD. В каждом объектном модуле должен быть только один блок ENDGSD. Длина блока информации блока ENDGSD - одно слово.
Формат блока ENDGSD:
0 |
Код блока ENDGSD=2 |
4.2.3. Блок двоичного текста программы (TXT).
Блок TXT содержит текст программы, который должен быть записан непосредственно в загрузочный модуль.
Формат блока TXT:
0 |
Код блока TXT = 3 |
Адрес загрузки |
|
Текст |
Текст |
Текст |
Текст |
Текст |
Текст |
. |
|
Текст |
Текст |
Текст |
Текст |
Текст |
Текст |
Блок TXT содержит адрес загрузки, слова (байты) текстовой информации. Конечное значение некоторых слов (байт) может быть ещё не определено, их значения изменяются в соответствии с информацией блока RLD. Если значения некоторых слов (байт) блока TXT не определены, то после блока TXT должен следовать блок RLD. Если же все значения блока TXT определены, блок RLD не требуется после блока TXT. Однако, по крайней мере, один блок RLD должен предшествовать первому блоку TXT.
4.2.4. Блок словаря перемещения (RLD).
Блок словаря перемещения содержит информацию, необходимую редактору связей для распределения и связывания блоков TXT.
Формат блока RLD:
0 |
Код блока RLD = 4 |
Байт смещения |
Командный байт |
Инф |
Инф |
Инф |
Инф |
. |
|
Командный байт |
Инф |
Инф |
Байт смещения |
Инф |
Инф |
Инф |
Инф |
Байт смещения |
Командный байт |
Инф |
Инф |
Инф |
Инф |
Блок RLD содержит командный байт (указывающий код типа команды, т.е. правило, по которому будут вычисляться значения неопределённых слов (байтов) предшествующего блока TXT), байт смещения и информацию, которая требуется для соответствующего типа команд.
4.2.5. Блок словаря внутренних имён (ISD).
Блок словаря внутренних имён объявляет определения внутренних имён. Редактор связей системы ФОДОС-2 не поддерживает этот блок. Поэтому ниже приведён не детальный формат блока ISD. Редактор связей игнорирует блок ISD.
Формат блока ISD:
0 |
Код блока ISD = 5 |
Не указано |
4.2.6. Блок конца объектного модуля (ENDMOD).
Блок конца объектного модуля объявляет конец объектного модуля. Блок ENDMOD должен быть последним в каждом объектном модуле.
Формат блока ENDMOD:
0 |
Код блока ENDMOD = 6 |
Длина блока ENDMOD - одно слово.
4.3. Листинг.
Листинг представляет собой результат трансляции программы, который выводится на терминал или на периферийное устройство и содержит программу в исходном и объектном виде, сообщения об ошибках и таблицу имён.
Листинг выдаётся по страницам. На рис. 1 каждое поле листинга помечено цифрой.
- поле оглавления
первая строка - информационная. Она содержит:
- наименование объектного модуля;
- наименование Ассемблера и его версию;
- дату (число, месяц, год);
- время дня (час, минута, секунда).
Последующие строки оглавления содержат подзаголовки с указанием номера страницы и номера строки соответствующей директивы .SBTTL.
- поле заголовка страницы содержит информационную строку с указанием номера страницы листинга и подзаголовок, определённый директивой .SBTTL.
- поле ошибки заполняется в случае обнаружения ошибки, содержит не более четырёх сообщений на строке (см. табл. 8).
- поле номера строки содержит порядковый номер строки исходной программы.
- поле счётчика адреса содержит восьмеричный адрес оператора.
- поле команды содержит объектные коды в восьмеричном виде.
- поле модификации содержит признак модифицируемых данных:
G - глобальное имя;
С - перемещаемое имя;
' (апостроф) - операнд.
- поле оператора содержит операторы исходной программы.
- поле таблицы имён содержит имена пользователя в алфавитном порядке и список программных секций в порядке появления их в программе.
Для имён пользователя указывается:
- имя пользователя;
- значение имени (******, если имя не определено);
- признак имени:
пробел - абсолютное;
R - относительное;
X - внешнее;
G - глобальное.
Для программных секций указывается:
- имя секции;
- длина секции;
- номер секции:
00 - абсолютной;
01- неименованной перемещаемой;
02 и т.д. - именованной.
10 поле командной строки повторяет введённую командную строку Ассемблера.
11 поле строки ошибок содержит общее число ошибок, обнаруженных в исходной программе,
Формат листинга можно изменить, задав в командной строке переключатель управления листингом /L:арг или /N:арг, см. п. 2.3.1.
4.4. Таблица перекрёстных ссылок.
Таблица перекрёстных ссылок печатается за листингом. Полная распечатка таблицы перекрёстных ссылок состоит из шести полей (см. рис. 2). Каждое поле начинается с новой страницы.
- Имена пользователя
- Имена регистров
- Имена макрокоманд
- Постоянные имена
- Имена программных секций
- Ошибки
Ссылки печатаются в виде P - L, где P - номер страницы, в которой появляется имя или код ошибки, а L - номер строки. Знак "#" вслед за ссылкой указывает на определение имени. Знак "*" соответствует имени, изменяющему свое значение.
Фрагмент листинга, полученного с использованием переключателя /L:TTM
1 TAIP MACRO V03.00 3-JAN-85 00:08:58 TABLE OF CONTENTS ------------------------------------------------------------ 1- 2 KONTROL PRIMER 2 TAIP MACRO V03.00 00:08:58 PAGE 1 ------------------------------------------------------------ 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 1 ! ! ! ! .TITLE TAIP ! 2 ! ! ! ! .SBTTL KONTROL PRIMER ! 3 ! ! ! ! .GLOBL SUBR1,SUBR2 ! 4 !000000 ! ! ! .CSECT PROG ! 5 ! ! ! ! .MCALL .TTYIN ! 6 !000000 !012702 ! !START: MOV #BUFFER,R2 ! ! !000026 ! ! ! 7 !000004 !110022 ! ! MOVB R0,(R2)+ U ! 8 !000006 !120027 ! ! CMPB R0,#LF ! ! !000000 ! ! ! 9 !000012 !105022 ! ! CLRB (R2)+ ! 10 !000014 !004767 ! ! JSR PC,SUBR1 ! ! !000000 ! G ! ! 11 !000020 !103767 ! ! BCS START ! 12 !000022 ! ! ! .TTYIN ! 13 !000026 ! ! !BUFFER: .BLOB 72 ! 14 ! !000000 ! ! .END START ------------------------------------------------------------ 9 TAIP MACRO V03.00 3-JAN-85 00:08:58 PAGE 1-1 SYMBOL TABLE BUFFER 000026R 002 START 000000R 002 SUBR2 = ****** G LF ****** G SUBR1 = ****** G . ABS. 000800 000 NAMIC MEMORY AVAILABLE FOR 68 PAGES ------------------------------------------------------------ 10,DK0:PR.LST/L:TTM=PROG1 ------------------------------------------------------------
Рис. 1
На рис. 2 приведён пример таблицы перекрёстных ссылок:
1 TAIR MACRO V03.00 00:12:27 PAGE S-1 CROSS REFERENCE TABLE (CREF V03.00 ) BUFFER 1-6 1-13# LF 1-8 START 1-6# 1-11 1-14 SUBR1 1-3 1-10 SUBR2 1-3 2 TAIP MACRO V03.00 00:12:27 PAGE R-1 CROSS REFERENCE TABLE (CREF V03.00 ) PC 1-10* R0 1-7 1-8 R2 1-6* 1-7* 1-9* 3 TAIP MACRO V02.00 00:12:2 PAGE M-1 CROSS REFERENCE TABLE (CREF V03.00 ) .TTYIN 1-5* 1-12 4 TAIP MACRO V03.00 00:12:27 PAGE P-1 CROSS REFERENGE TABLE (CREF V03.00 ) .BLKB 1-13 .CSECT 1-4 .END 1-14 .GLOBL 1-3 .IF 1-12 .MCALL 1-5 .SBTTL 1-2 .TITLE 1-1 BCS 1-11 1-12 CLRB 1-9 CMPB 1-8 EMT 1-12 JSR 1-10 MOV 1-6 MOVB 1-7 5 TAIP MACRO V03.00 00:12:27 PAGE C-1 CROSS REFERENCE TABLE (CREF V03.00 ) 0-0 .ABS. 0-0 PROG 1-4 6 TAIP MACRO V03.00 00:12:27 PAGE E-1 CROSS REFERENCE TABLE (CREF V03.00 ) U 1-8*
Рис. 2
5. СООБЩЕНИЯ
5.1. Сообщения программисту.
Ошибки, обнаруженные в исходной программе, отмечаются в листинге соответствующими сообщениями. Сообщения печатаются в поле ошибок (см. п. 4.3). Для исправления ошибок необходимо внести изменения в исходную программу и повторно её протранслировать.
Сообщение |
Причина |
---|---|
А |
Ошибка трансляции. Ошибка адресации или перемещения:
Директивы Ассемблера .BLKB, .BLKW и .REPT должны содержать абсолютное значение или выражение
Если исходная программа содержит директиву .ENABL GBL, Ассемблер просматривает в конце первого прохода таблицу имён и предполагает все неопределённые имена глобальными. Если какое-нибудь из этих имён определяется при втором проходе, происходит общая ошибка адресации.
|
В |
Значение счётчика адреса нечётно, во время трансляции значение счётчика адреса увеличивается на 1 |
D |
Обращение к многократно определённому имени |
E |
Отсутствует директива .END в конце исходной программы. Система завершает текущий проход трансляции |
I |
Недопустимый символ. Недопустимый символ в листинге заменяется знаком вопроса (?), символ игнорируется, трансляция выполняется |
L |
Исходная строка содержит более 132 символов (например, при замене формальных параметров фактическими в макрорасширениях) |
M |
Многократное определение метки. Метка эквивалентна по первым шести символам ранее встреченной метке |
N |
Константа содержит цифру, которая не входит в текущую систему счисления программы, константа рассматривается как десятичная |
О |
Ошибка в поле операции:
|
P |
Ошибка фазы.
|
Q |
Синтаксическая ошибка в операторе:
|
R |
Ошибка регистра:
|
T |
Ошибка усечения:
|
U |
Неопределённое имя. Неопределённому имени присваивается нулевое значение |
Z |
Выполнение команды различно в ЭВМ "ЭЛЕКТРОНИКА-60", "ЭЛЕКТРОНИКА-100-25", "ЭЛЕКТРОНИКА-79" (Например, двухадресные команды, имеющие адресацию RN, (RN)+ ; RN, -(RN); команды JMP и JSR с автоинкрементным методом адресации). Встреченная команда (инструкция) не обрабатывается транслятором на данном центральном процессоре. |
5.2. Сообщения оператору.
Сообщения, приведённые ниже, указывают на преждевременное прекращение трансляции.
?MACRO-F-DEVICE FULL DEV |
|
Причина. |
На томе, используемом для вывода, недостаточно свободного места для размещения выходного файла. |
Действие. |
Освободить место на томе или использовать для вывода другой том. |
?MACRO-F-FILE NOT FOUND DEV:FILNAM.TYP |
|
Причина. |
Файл, указанный в командной строке, не найден. |
Действие. |
Проверить, существует ли файл с указанным именем. Ввести правильную командную строку. |
?MACRO-F-.INCLUDE DIRECTIVE FILE ERROR |
|
Причина. |
Файл, указанный в директиве .INCLUDE, не существует, или в директиве указана недопустимая спецификация файла. В командной строке указано недопустимое имя устройства. Уровень вложения исходных файлов по директиве .INCLUDE превышает 5. |
Действие. |
Проверить введённую командную строку и ввести допустимую для директивы .INCLUDE спецификацию файла. Вновь ввести командную строку, указав допустимое имя устройства. Убедиться, что уровень вложения исходных файлов не превышает 5. |
?MACRO-F-INSUFFICIENT MEMORY |
|
Причина. |
Конфигурация вычислительной системы имеет объём памяти менее 32K байт, необходимый для выполнения программы. |
Действие. |
Увеличить объём свободной памяти (разгрузить драйверы неиспользуемых в данный момент устройств; завершить выполнение основного или системного задания и удалить его; использовать монитор одного задания SJ; разрешить свопинг по команде SET USR SWAP; уменьшить размеры программы, уменьшив максимальное число каналов, открытых одновременно, или разбив программу на небольшие модули для увеличения оверлейного эффекта, или использовав алгоритм, требующий минимальный объём памяти, или записав данные на периферийные устройства). |
?MACRO-F-INVALID COMMAND |
|
Причина. |
Командная строка содержит синтаксическую ошибку или более шести спецификаций файлов. |
Действие. |
Ввести правильную командную строку. |
?MACRO-F-INVALID DEVICE DEV: |
|
Причина. |
Указанное устройство не обслуживается системой. |
Действие. |
Установить в системе обслуживание требуемого устройства либо использовать другое устройство. |
?MACRO-F-INVALID MACRO LIBRARY |
|
Причина. |
Файл макробиблиотеки повреждён или создан не библиотекарем системы ФОДОС-2. |
Действие. |
Использовать программу LIBR для создания новой копии SYSMAC.SML. |
?MACRO-F-INVALID OPTION: /X |
|
Причина. |
Указан недопустимый переключатель /X. |
Действие. |
Проверить переключатель, указанный в командной строке, и ввести правильную командную строку. |
?MACRO-F-I/O ERROR ON DEV:FILNAM.TYP |
|
Причина. |
Ошибка при считывании или записи указанного файла. |
Действие. |
Проверить исправность и готовность оборудования. |
?MACRO-F-I/O ERROR ON WORKFILE |
|
Причина. |
Ошибка при считывании или записи рабочего файла WRK.TMP. Эта ошибка может произойти при недостаточной области на диске для размещения рабочего файла. |
Действие. |
Проверить исправность и готовность оборудования и использовать команду SQUEEZE или переключатель /S программы DUP для сжатия тома и размещения рабочего файла. |
?MACRO-F-.LIBRARY DIRECTIVE FILE ERROR |
|
Причина. |
Файл, указанный в директиве .LIBRARY, не существует или в директиве указана недопустимая спецификация файла. Спецификация файла, указанная в директиве .LIBRARY, содержит имя устройства последовательного доступа. Конфигурация вычислительной системы не содержит устройство, указанное в командной строке. Уровень вложения файлов по директиве .LIBRARY превысил допустимый. |
Действие. |
Проверить введённую командную строку и ввести допустимую для директивы .LIBRARY спецификацию файла. Убедиться, что спецификация файла, указанная в директиве .LIBRARY, содержит имя устройства произвольного доступа. Ввести новую командную строку, содержащую имя устройства конфигурации данной вычислительной системы. Проверить, чтобы уровень вложения файлов по директиве .LIBRARY не превысил допустимое значение. |
?MACRO-F-PROTECTED FILE ALREADY EXISTS DEV:FILNAM.TYP |
|
Причина. |
Попытка создать файл с таким же именем, как у имеющегося защищённого файла. |
Действие. |
Отменить защиту существующего файла по команде монитора UNPROTECT или по переключателю /Z программы PIP, или указать другое имя для создаваемого файла. |
?MACRO-F-STORAGE LIMIT EXCEEDED (64K) |
|
Причина. |
Программа требует более 128K байт памяти для хранения таблицы виртуальных имён, в то время как система отводит данной таблице не более 128K байт. |
Действие. |
Проверить причины, вызывающие переполнение таблицы виртуальных имён. Разделить исходную программу на независимые модули, и транслировать каждый модуль отдельно. |
?MACRO-W-I/O ERROR ON CREF FILE:CREF ABORTED |
|
Причина. |
На выходном томе недостаточно свободного места для выполнения операции, или во время записи на том рабочего файла CREF произошла ошибка ввода- вывода. Вывод файла CREF прерывается, но трансляция продолжается. |
Действие. |
Увеличить на томе объём свободной памяти (удалить с тома ненужные файлы; использовать переключатель /ALLOCATE для резервирования нужного количества блоков для выходного файла; сжать том по команде монитора SQUEEZE или по переключателю /S программы DUP; переписать часть сегментов справочника на другой том). Создать несколько логических дисков на томе, используя команды MOUNT и DISMOUNT. Если переполнение тома всё ещё сохраняется после принятых мер, использовать том большей ёмкости. |