~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ D5A00544D22370927DDE725D717BD79E__1704421620 ✰
Заголовок документа оригинал.:
✰ OS/360 Object File Format - Wikipedia ✰
Заголовок документа перевод.:
✰ Формат объектного файла OS/360 — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/OS/360_Object_File_Format ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/d5/9e/d5a00544d22370927dde725d717bd79e.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/d5/9e/d5a00544d22370927dde725d717bd79e__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 12:57:03 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 5 January 2024, at 05:27 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Формат объектного файла OS/360 — Википедия Jump to content

Формат объектного файла OS/360

Из Википедии, бесплатной энциклопедии

Формат объектного файла OS /360 — это стандартный формат файла объектного модуля для IBM DOS/360 , OS/360 и VM/370 . [1] Унивак ВС/9 , [2] и Фуджицу BS2000 [3] операционные системы для мэйнфреймов. В 1990-х годах формат получил расширение записью типа XSD для операционной системы MVS для поддержки более длинных имен модулей на языке программирования C. [4] Этот формат до сих пор используется операционной системой z/VSE (продолжением операционной системы DOS/360 ). Напротив, он был заменен форматом файла GOFF в операционной системе MVS (продолжение операционной системы OS/360 ) и в операционной системе z/VM (продолжение VM/370) операционной системы . ). Поскольку загрузчики MVS и z/VM по-прежнему будут обрабатывать этот старый формат, некоторые компиляторы решили продолжать создавать этот формат вместо нового формата GOFF . [5]

Используйте [ править ]

Этот формат обеспечивает описание скомпилированного объектного кода приложения, которое можно передать в редактор связей для преобразования в исполняемую программу или запустить непосредственно через загрузчик объектных модулей. Он создается Ассемблером или компилятором языка программирования. В оставшейся части этой статьи, если не требуется явного объяснения разницы между компилятором языка и ассемблером, термин «компиляция» включает в себя «ассемблер», а «компилятор» включает в себя «ассемблер».

Слабые стороны [ править ]

Этот формат считался адекватным на момент его первоначальной разработки, примерно в 1964 году. Со временем у него появился ряд недостатков, среди которых

  • он поддерживает только имена длиной 8 байт (и обычно существует соглашение, согласно которому имена должны быть только ПРОПИСНЫМИ РЕГИСТРАМИ и ограничены определенными символами в имени, см. обсуждение ниже).
  • выравнивание не может быть задано.
  • модуль, который представляет собой чистые данные и не является исполняемым, не может быть указан.
  • реентерабельный модуль (в отличие от модуля, предназначенного только для чтения) не может быть указан.
  • не может отличить подпрограмму (программу, которая обрабатывает данные только через аргументы) от функции (программа, которая возвращает данные через возвращаемое значение).
  • модуль, спроектированный так, чтобы он был подвижным (а не просто повторно входящим), не может быть указан.
  • адресные константы не могут быть идентифицированы как указатели (например, для доступа к структуре данных) в отличие, скажем, от доступа к таблице (которая не изменяется) или к виртуальному методу в динамической записи.
  • атрибуты не могут быть назначены внешним ссылкам (ссылка на код или ссылка на данные).
  • нет средств, позволяющих процедурам или функциям проверять или проверять типы аргументов или проверять внешние структуры.
  • нет средств для объявления объекта, где часть структуры — это данные, а часть — код (методы, которые работают с данными объекта).
  • Символическая таблица SYM ограничена в информации, которую она может предоставить.

Эти и другие недостатки привели к замене этого формата GOFF форматом файла модуля . Но это был хороший выбор, поскольку он удовлетворял потребностям языков программирования, использовавшихся в то время, работал и был прост в реализации (особенно там, где машины в то время могли иметь всего 8 КБ памяти, многие из которых работали несколько одновременных или последовательных заданий всего с 64 КБ и фактически выполняющих полезную работу), просты в использовании и для простых программ (объектная ориентация и такие концепции, как виртуальные методы, появятся через десятилетия с момента их первоначальной разработки), все еще могут быть адекватный. Кроме того, этот формат по-прежнему пригоден для использования в старых программах, которые либо никогда не менялись, либо в которых исходный код недоступен, а объектные файлы являются единственной оставшейся частью программы.

Обратите внимание, что формат файла GOFF просто заменил этот формат (и предоставил дополнительную информацию для компилятора языка или ассемблера), формат по-прежнему действителен, может продолжать использоваться и не устарел. Преимущество этого формата состоит в том, что его легко и просто создать, а компилятор для языка может жить с его ограничениями, которые состоят из 8-символьных имен модулей, состоящих только из заглавных букв, и приложений размером не более 2 ^ 24 ( 16 мегабайт) для кода и данных означает, что любой язык программирования, который может записывать 80-байтовые двоичные файлы фиксированного формата (в основном все, включая COBOL и FORTRAN, а не только ассемблер), может использоваться для создания компилятора для этого объектного формата. Фактически, Австралийской комиссией по атомной энергии компилятор Pascal 8000 для IBM 360/370, разработанный , который сам был написан на языке Pascal как автономный компилятор еще в 1978–1980 годах, напрямую создавал свои собственные объектные файлы без использования ассемблера в качестве промежуточного шага. .

Типы записей [ править ]

Существует 6 различных типов записей:

  • Записи ESD определяют основные программы, подпрограммы, функции, фиктивные разделы, Fortran Common и любой модуль или процедуру, которые могут быть вызваны другим модулем. Они используются для определения программ или сегментов программы, которые были скомпилированы при этом выполнении компилятора, а также внешних процедур, используемых программой (таких как exit() в C , CALL EXIT в Fortran ; new() и Dispose( ) в Паскале ). Записи ESD должны появляться перед любой ссылкой на символ ESD.
  • Записи TXT содержат машинные инструкции или данные, хранящиеся в модуле.
  • Записи RLD используются для перемещения адресов. Например, программа, ссылающаяся на адрес, расположенный в 500 байтах внутри модуля, будет внутренне хранить адрес как 500, но когда модуль загружается в память, он обязательно будет расположен где-то еще, поэтому запись RLD сообщает редактору связей или загрузчику, что именно адреса, которые нужно изменить. Кроме того, когда модуль ссылается на внешний символ, он обычно устанавливает значение этого символа равным нулю, а затем включает запись RLD для этого символа, чтобы позволить загрузчику или редактору связей изменить адрес на правильное значение.
  • Записи SYM были добавлены для предоставления дополнительной информации о символе, такой как тип данных (символьный или числовой) и размер элемента.
  • Записи XSD были добавлены для предоставления дополнительной информации, помимо той, что содержится в записи ESD, об общедоступных символах, таких как процедуры и функции, а также для увеличения размера имени процедуры или функции до более чем 8 символов.
  • Записи END указывают конец модуля и, возможно, место начала выполнения программы.

Формат [ править ]

Все записи имеют длину ровно 80 байт; неиспользуемые поля должны быть пустыми. Первый байт каждой записи всегда представляет собой двоичное значение 02. Следующие 3 байта всегда представляют собой тип записи. Значения символов находятся в формате EBCDIC . Остальные поля каждой записи зависят от типа записи. По соглашению, если модуль был назван в операторе TITLE программы на языке ассемблера (или компилятор языка решает дать модулю имя), его имя отображается по левому краю в позициях 73–80 каждой записи; если имя короче 8 символов или имя не указано, для оставшейся части каждой записи отображается порядковый номер (в символах, выровненный по правому краю и заполненный нулями). На практике поле порядкового номера может быть пустым или содержать все, что переводчик языка хочет поместить туда, и, по сути, является полем комментария.

Ассемблер (или компилятор, в случае языка высокого уровня, такого как C , COBOL , Fortran , Pascal , PL/I или RPG III ), создаст запись ESD для каждой подпрограммы, функции или программы, а также для Общие блоки в программах на Фортране. Дополнительные записи ESD в записях ESD будут созданы для операторов ENTRY (псевдоним модуля или альтернативная точка входа для модуля), для дополнительных подпрограмм, функций или именованных или пустых блоков COMMON на Фортране, включенных как часть скомпилированных или собранных модулей. и для имен внешних подпрограмм и функций, вызываемых модулем.

Обратите внимание, что существует два типа общедоступных символов: записи ESDID и записи LDID. Записи ESDID представляют собой CSECTS и DSECTS (программы, процедуры и функции и, возможно, объявления записей или структур), а записи LDID представляют собой операторы ENTRY (альтернативные или псевдонимы точек входа для CSECT или DSECT). Пространство нумерации ESDID отделено от пространства нумерации LDID, поэтому два разных именованных символа, один ESDID, а другой LDID, могут иметь двоичное значение 0001.

Исполняемый объектный код и данные программы будут храниться в записях TXT. Вызовы других подпрограмм, функций или блоков COMMON разрешаются через записи RLD, которые изменяют адрес, хранящийся в записи TXT, для определения полного адреса подпрограммы или функции. При желании язык может предоставлять символическую справочную информацию, такую ​​как имена объектов и информацию о типах данных или символы отладки, через записи SYM, а затем оператор END указывает конец файла объектного модуля и необязательный начальный адрес для подпрограммы, функции или программы, которая этот файл следует запускать, если начальный адрес подпрограммы не является первым байтом первой подпрограммы (некоторые подпрограммы могут иметь неисполняемые данные, предшествующие их фактическому коду, или первая собранная или скомпилированная подпрограмма не является «основной» программой). или «основной» модуль.) Как сообщалось, некоторые люди обнаружили из-за того, как работали старые ассемблеры (около 1968–1975 гг.), Программа компилируется быстрее, если вы помещаете данные «над» программой перед кодом программы, однажды ассемблер начал замечать инструкции, он работал намного медленнее, поэтому программисты писали процедуры, в которые сначала помещались данные и константы, а затем включался код программы. Когда сборка программы могла занимать от 30 минут до часа, а не нескольких секунд, как сейчас, это была большая разница.

Обратите внимание: хотя это и не является обязательным, соглашением является то, что имена модулей и символические имена должны быть в верхнем регистре , что первым символом поля имени является буква или символы @, # или $, а последующие символы имени состоят из эти символы плюс цифры от 0 до 9, хотя более старое программное обеспечение может или не может правильно обрабатывать файлы объектных модулей, в которых использовались идентификаторы в нижнем регистре. Большинство языков программирования, кроме ассемблера, не могут вызывать модули, имена которых содержат @ или # (особенно Fortran , поэтому его библиотека времени выполнения имеет имя с #, чтобы оно не конфликтовало с любым именем, выбранным программистом), поэтому большинство программ, подпрограмм или функций были написаны так, чтобы использовать только букву для первого символа, а если имя было длиннее 1 символа, чтобы использовать только буквы и цифры для символа со 2-го по (до) 8-го. Хотя большинство неассемблерных языков не могут обрабатывать $ в имени, исключением является Фортран, который может распознавать имена подпрограмм, содержащие $. (Обратите внимание, что выбор не использовать # @ или $ не применяется к «основной» программе, написанной на ассемблере или любом другом языке, который может использовать эти идентификаторы, загрузчик программы не заботится о том, какое имя у модуля.) Также Модули, написанные для использования в качестве подпрограмм, обычно ограничивались 6 символами или меньше, поскольку версии Фортрана примерно до 1978 года также не могут использовать подпрограммы или модули, длина которых превышает 6 символов. Компилятор COBOL обычно отбрасывает символ тире, если он появляется в PROGRAM-ID программы или в инструкции CALL внешнего модуля.

В 1990-х годах был добавлен новый тип записи, запись XSD, чтобы расширить использование этого формата объектного модуля, включив в него имена модулей длиной более 8 символов и разрешив имена в смешанном регистре, как того требует язык программирования C.

Общий план [ править ]

Формат объектного файла
Префикс (байт 1) Тип (байты 2–4) Цель Адрес (байты 6–8) в двоичном формате, если используется. Размер информации в байтах 17+ (байты 11–12) Биты флага (запись XSD) или пробелы (байты 13–14). Двоичный ESDID (байты 15–16) Данные Идентификатор (байты 73–80)
(Байты 17–64) (Байты 65–72)
02 ЭСР Тип модуля Заготовки Используемый размер в байтах 17–64. Заготовки Двоичный ESDID первого символа модуля, отличного от LD, в байтах 17–64 или пустой, если все символы в этой записи являются LD. От 1 до 3 16-байтовых символов модуля (см. ниже) Заготовки идентификатор колоды,
Последовательность чисел,
или оба
ТЕКСТ Программа или данные Относительный адрес данных в байтах 17–72 этой записи. Используемый размер в байтах 17–72. Заготовки ЭСИД 1–56 байт данных («данные» могут быть программными инструкциями, программными данными или и тем, и другим)
РЛД Перемещаемая информация Заготовки Используемый размер в байтах 17–72. Заготовки Заготовки От 1 до 13 записей перемещения переменной длины (см. таблицу ниже)
СИМ Информация о таблице символов Заготовки Используемый размер в байтах 17–72. Заготовки Заготовки Данные символа переменной длины (см. таблицу ниже)
XSD Расширенная информация о символах Заготовки Используемый размер в байтах 17–72. Биты флагов (см. таблицу ниже) Идентификатор LDID, если XSD предназначен для LD; в противном случае ESDID Данные XSD (см. таблицу ниже)
КОНЕЦ Конец модуля Адрес входа, если он указан, или пусто. Заготовки заготовки ESDID адреса входа или пробелы Конечные данные (см. таблицу ниже)

Запись ESD [ править ]

Символ модуля записи ESD (16 байт)
Поле Размер Примечания
Имя 8 Идентифицирует программу, функцию, подпрограмму или блок FORTRAN COMMON (он будет пустым для ПК или пустым COMMON или безымянным блоком данных)
Тип 1 Ценить
(Шестнадцатеричный)
Модуль
Тип
Что такое модуль
00 СД START, CSECT, DSECT (фиктивный раздел; не будет иметь записей TXT) или модуль с именем BLOCK DATA на Фортране.
01 ЛД ВХОД (Определение метки в ранее определенном CSECT)
02 ЯВЛЯЕТСЯ EXTRN (внешняя ссылка)
04 ПК Частный код (START или CSECT без имени или безымянный модуль BLOCK DATA на Фортране; этот модуль нельзя вызвать как функцию или подпрограмму из другой программы)
05 СМ Имя Фортрана или пустое ОБЩЕЕ (указывает только размер; записи CM никогда не имеют записей TXT)
06 XD (пиар) Внешний фиктивный раздел или псевдорегистр
ВХ WXTRN (Weak Extern — внешняя процедура, которая не обязательно должна присутствовать для работы модуля)
0D СД Четверной START или CSECT
ПК Четверной частный код
СМ Общий с четырехуровневым выравниванием (указывает только размер; COMMON никогда не имеет записей TXT)
Адрес 3 Двоичный начальный адрес этого модуля; адрес символа внутри модуля для LD
Флаг 1
Выравнивание в двоичном формате для XD;
Пустой для ER, LD или WX;
для SD, CM или ПК используйте следующее:
Биты Ценить Цель
0-1 Не используется
2 0 Используйте бит 5 для значения RMODE.
1 RMODE 64 бита
3 0 Используйте биты 6–7 для AMODE.
1 РЕЖИМ 64 бита
4 0 Модуль доступен для чтения/записи
1 RSECT (модуль доступен только для чтения и не подлежит самомодификации)
5 0 RMODE 24 бита
1 RMODE 31 бит или RMODE ЛЮБОЙ
6–7 00 РЕЖИМ 24 бита
01 РЕЖИМ 24 бита
10 РЕЖИМ 31 бит
11 МОД ЛЮБОЙ
Размер 3 Длина в двоичном формате для ПК, CM или SD; один пробел, за которым следует 2-байтовый двоичный LDID для LD (и номера ESDID отделены от номеров LDID; ESDID может иметь номер 0001, и это будет идентификатор, отличный от LDID с номером 0001); заготовки для ER, XD, PR или WX. Обратите внимание: компилятор программы, создающий SD-запись, который не знает, какой длины будет модуль, может оставить это поле пустым, а затем указать длину этого модуля в записи END.

Записи о переезде RLD [ править ]

Обратите внимание, что первая запись перемещения записи RLD должна иметь длину 8 байт. какой-либо записи Если в поле флага установлен бит 7, запись, следующая за ней, использует те же значения значений перемещения и положения , что и эта запись, а следующая запись имеет 4 байта, она содержит только поля флага и адреса. этой записи Если в поле флага установлен бит 7, это продолжается для следующей за ней записи; если бит флага этой записи не установлен, следующая за ней запись (если в этой записи есть какие-либо дополнительные записи) использует полные 8 байтов.

Для простоты предположим, что программа C с именем basura вызывает функцию exit ().

Запись о перемещении переменной записи RLD (4 или 8 байтов)
Поле Размер Примечания
Переезд 2 Двоичный ESDID перемещаемого символа; это иностранный символ ( выход )
Позиция 2 Двоичный ESDID, по которому должно быть произведено перемещение; это модуль, ссылающийся на символ перемещения выше ( basura )
Флаг 1
Биты Значение
0 Сдержанный
1 Если 1, добавьте 4 к значению постоянной длины адреса в битах 4–5.
2-3 Ценить Адрес Тип константы
0 A — Внешний адрес, может быть таблицей данных или внешним модулем.
1 V
2 вопрос
3 CXD
4-5 Постоянная длина адреса — 1
6 Направление перемещения (0 для добавления; 1 для вычитания). Вычитание обычно используется только для адресных констант типа A.
7 если 1, поля значений позиции и перемещения записи, следующей за этой в этой записи RLD, такие же, как и эта, и эта запись имеет длину всего 4 байта. Последняя запись записи RLD должна очистить этот бит. Эта возможность подходит для одного конкретного случая и, наверное, самого распространенного: когда программа производит перемещение сама на себя. ESID адреса, который нужно найти, и место, где хранится адрес, одинаковы, поэтому он используется для обозначения адресных ссылок на другие части этого модуля.
Адрес 3 Абсолютный адрес в модуле ввода позиции, которую необходимо переместить.

SYM-запись [ править ]

Обратите внимание, что записи символьной информации упаковываются одна за другой; всегда присутствуют только первые два поля. Поле имени опускается, если бит 4 организации равен 1; любые последующие поля также опускаются для элементов, не являющихся данными (бит 0 организации равен 0). В случае элемента данных (бит 0 организации равен 1) всегда будут присутствовать только поля типа данных и длины, а поле длины может составлять 1 или 2 байта в зависимости от типа данных.
Информация о символе записи SYM
Поле Номер байта Размер Примечания
Организация 1 1
Биты Ценить Значение
0 0 Нетип данных
1 Тип данных
(Для нетипа данных)
1-3 000 Космос
001 Секция управления
010 Секция управления макетом
011 Общий
100 Инструкция по эксплуатации машины
101 КОО
(Для типа данных)
1 0 Нет кратности
1 Множественность (указывает на наличие поля M)
2 0 Независимая (не упакованная или зонированная десятичная константа)
1 Кластер (упакованная или зонированная десятичная константа)
3 0 Без масштабирования
1 Масштабирование (указывает наличие поля S)
И тип данных, и нетип данных
4 0 Имеет имя
1 Имя не указано
5-7 Длина имени - 1
Адрес 2 3 Смещение от начала Csect
Имя 0-8 Если бит 4 байта 1 равен 1, это поле отсутствует, в противном случае 1–8 байтов.
Следующие поля присутствуют только для элементов данных (бит 0 байта 1 равен 1).
Тип данных 1 Значение в шестнадцатеричном формате
00 Символ (C — тип; длина 2 байта)
04 Шестнадцатеричный (X — тип; длина 2 байта)
08 Двоичный (B — тип; длина 2 байта)
10 F-тип, 32-битное целое число (длина 1 байт, обычно 4)
14 H-тип, 16-битное целое число (длина 1 байт, обычно 2)
18 E-тип, 32-битная (одинарная точность) с плавающей запятой (длина 1 байт, обычно 4).
1 С D-тип, 64-битная (двойная точность) с плавающей запятой (длина 1 байт, обычно 8)
20 32-битный адрес или значение типа A или Q (длина 1 байт, обычно 4)
24 Y-тип, 16-битный адрес или значение (длина 1 байт, обычно 2)
28 S-тип (длина 1 байт)
V-тип, 32-битный внешний символ (длина 1 байт, обычно 4)
30 P-тип, упакованное десятичное число переменной длины (длина 1 байт)
34 Z-тип, зонированная десятичная дробь переменной длины (длина 1 байт)
38 L-тип (длина 1 байт)
Длина 1 или 2 Длина - 1; 2 байта для символьного, шестнадцатеричного или двоичного типа (т. е. размер от 1 до 32 768 байт); 1 байт для всех остальных типов (размер от 1 до 256 байт)
Множественность 0 или 3 Поле M; счетчик повторений 3 байта или предполагаемое значение 1 (не повторяется), если это поле отсутствует (бит 1 организации равен 0)
Шкала 0 или 2 поле S; 2-байтовое значение масштаба (присутствует только для данных типа F, H, E, D, L, P и Z) или масштаб предполагается равным 0, если это поле отсутствует (бит 3 организации равен 0)

XSD-запись [ править ]

Данные XSD-записи
Тип записи XSD был добавлен в 1990-х годах, чтобы позволить MVS поддерживать более длинные имена модулей для компилятора C.
Поле Номер байта Размер Примечания
Флаговый байт 1 13 1 Биты 1–6 используются для XPLINK; Бит 7 используется для AMODE 64; ни один из них не используется переплетчиком; Бит 8 всегда равен 0.
Флаговый байт 2 14 1 Кусочек Значение
1 Имя может иметь несколько определений
2 Имя искажено
3 Внутренняя связь
4 Шаблон
5 Конкат
6 Имя, подходящее для импорта или экспорта
7 1, если имя является функцией
8 1, если имя было сопоставлено (например, #pragma map)
Длина 17-20 4 Длина имени
Компенсировать 21-24 4 Смещение первого байта имени или подстроки имени (начало 1)
Тип 25 1 Ценить
(Шестнадцатеричный)
Модуль
Тип
Что такое модуль
00 СД START, CSECT, DSECT (фиктивный раздел; не будет иметь записей TXT) или модуль с именем BLOCK DATA на Фортране.
01 ЛД ВХОД (Определение метки в ранее определенном CSECT)
02 ЯВЛЯЕТСЯ EXTRN (внешняя ссылка)
04 ПК Частный код (START или CSECT без имени или безымянный модуль BLOCK DATA на Фортране; этот модуль нельзя вызвать как функцию или подпрограмму из другой программы)
05 СМ Имя Фортрана или пустое ОБЩЕЕ (указывает только размер; записи CM никогда не имеют записей TXT)
06 XD (пиар) Внешний фиктивный раздел или псевдорегистр
ВХ WXTRN (Weak Extern — внешняя процедура, которая не обязательно должна присутствовать для работы модуля)
УР
Адрес 26-28 3 24-битный адрес символа
Спецификация 29 1 Зависит от типа модуля (значение байта 25)
Тип модуля Ценить Значение
LD ER CM Нуль или WX Пустой Не используется
пиар Коэффициент выравнивания
00 Выравнивание байтов
01 Выравнивание полуслов
03 Выравнивание слов
07 Выравнивание двойного слова
SD или ПК Биты 1-2 Не используется
Бит 3 Если 1, RMODE 64; в противном случае используйте значение бита 6
Бит 4 Если 1, МОД 64; в противном случае используйте значение битов 7 и 8.
Бит 5 1, если РСЭКТ
Бит 6 0=РЕЖИМ 24; 1 = РЕЖИМ 31; (Игнорируется, если бит 3 равен 1)
Биты 7-8 00 или 01 = РЕЖИМ 24; 10=РЕЖИМ 31; 11=AMODE любой (игнорируется, если бит 4 равен 1)
Длина или идентификатор 30-32 3 Ценить Значение
Нуль Если длина указана в записи END для типов SD, PC, CM
Длина Длина секции управления Для типов SD, PC, CM; Длина псевдорегистра для типа PR
Идентификатор Идентификатор записи SD, содержащей имя для типа LD
Пустой Если тип ER или WX
Имя 33-72 Варьируется Имя или подстрока имени

КОНЕЦ записи [ править ]

Модуль заканчивается данными для записи END. Это должна быть последняя запись модуля. В колоде объектов (группе модулей, помещенных вместе в файле) может присутствовать вместе более одного модуля, но каждый из них должен начинаться с записи ESD и заканчиваться записью END.
КОНЕЦ Запись данных
Поле Номер байта Размер Примечания
Запустить ЭСИД 15-16 2 Для записи END типа 1 (см. байт 33) Двоичный ESDID начальной точки этого модуля, если он указан; пробелы, если запись типа 2 END или не указана. Обратите внимание, что начальный ESDID этого модуля может быть внешним символом. Это позволяет модулю автоматически запускать библиотеку времени выполнения или код запуска вместо себя. (Компилятор языка либо всегда присваивал основной программе программы, которую он скомпилировал, одно и то же имя, либо создавал псевдоним имени «записи», либо запись SD, либо запись LD со стандартным именем, которое всегда было одним и тем же и в которое он мог передавать контроль, когда он будет готов к запуску пользовательской программы.)
Начальное имя 17-24 8 Для записи END типа 2 (см. байт 33) имя начальной точки этого модуля, если указано; пробелы, если запись типа 1 END или не указана
Размер модуля 29-32 4 Двоичная длина модуля в байтах, если она не указана в записи SD записи ESD; байт 29 равен нулю, если он там был указан; пробелы, если они не предусмотрены. Это позволяет компилятору выполнять «один проход» и записывать объектный код в объектный файл во время его компиляции, а затем указывать размер модуля после его компиляции, когда он действительно «знает», насколько велика программа.
КОНЕЦ Формат или количество РДЭ 33 1 Цифровой символ EBCDIC «1», «2» или пробел; указывает тип формата записи END. Обратите внимание, что некоторые версии ассемблера используют этот байт для указания количества записей идентификатора (IDR) (значения в байтах 34–52 или 53–71, если они присутствуют), находящихся в этой записи. Пробел может означать, что присутствует 1 запись или ни одна из них, или может использоваться для указания на то, что это запись ассемблера типа 1. Поля идентификатора по сути являются полем комментариев, поэтому их можно использовать для чего угодно (особенно поле «Номер заказа») или они могут быть пустыми.
Обратите внимание, что байты 34–52 вместе называются записью IDR. Байты 53–71 известны как вторичная запись IDR. Они могут быть пустыми или оба могут быть пустыми. Кроме того, в отличие от любых других информационных полей, содержащих числа, все значения в IDR являются текстовыми и ни одно из них не выражается в двоичном формате.
№ заказа. 34-43 9 Заказной номер ассемблера или идентификатор составителя, может состоять из букв или цифр.
Версия 44-45 2 Двухзначный номер версии ассемблера или компилятора
Редакция 46-47 2 Двухзначный номер версии ассемблера или компилятора
Год запуска 48-49 2 Последние две цифры года запуска этой сборки или года компиляции программы, например 80 для 1980 или 2080 года. Учитывая, когда формат был разработан, 00 и числа больше 63, вероятно, относятся к 20-му веку (1964-2000), а все числа выше 0 и до 64 лет, вероятно, в 21-м (2001-2063 гг.).
День бега 50-52 3 3-значный день года, когда была запущена эта сборка или скомпилирована программа, например 001 для 1 января; 032 для 1 февраля и т. д. Числа позже 059 (которые всегда означают 28 февраля) могут быть одним днем ​​или днем ​​после этой даты, в зависимости от того, была ли исходная программа скомпилирована или собрана в високосный год; 060 будет либо 29 февраля високосного года, либо 1 марта в любой другой год. 365 будет 30 или 31 декабря в зависимости от того, был ли год его составления високосным или нет. 366 всегда будет означать модуль, собранный или скомпилированный 31 декабря високосного года.
Дополнительный идентификатор 53-71 18 По сути, это тот же формат, что и 33–52, если он включен, или это пробелы.

Ссылки [ править ]

  1. ^ OS/VS - Руководство программиста на ассемблере VM/370 (PDF) (Пятое изд.). Сан-Хосе, Калифорния: IBM. Сентябрь 1982 г. GC33-4021-4.
  2. ^ Справочное руководство по ассемблеру VS / 9: Руководство по программированию для мейнфреймов Univac серий 90/60, 90/70 и 90/80 , Sperry Univac, Циннамонсон, Нью-Джерси, 1978
  3. ^ Справочное руководство ASSEMBH , U5223-J-Z125-3-7600, Fujitsu Technology Solutions GmbH, июнь 2010 г., http://manuals.ts.fujitsu.com/file/957/assh_bs.pdf (по состоянию на 7 августа 2013 г.)
  4. ^ Руководство программиста по ассемблеру высокого уровня для z/OS, z/VM и z/VSE , Приложение C. Выпуск 6, SC26-4941-05, IBM, Сан-Хосе, Калифорния, июль 2008 г. http://publibfp.boulder.ibm. com/cgi-bin/bookmgr/download/asmp1020.pdf [ постоянная мертвая ссылка ] (Проверено 27 марта 2010 г.)
  5. ^ Заявления IBM z/VSE по управлению системой: версия 5, выпуск 1 , SC34-2637-00, IBM, 1984, 2011.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: D5A00544D22370927DDE725D717BD79E__1704421620
URL1:https://en.wikipedia.org/wiki/OS/360_Object_File_Format
Заголовок, (Title) документа по адресу, URL1:
OS/360 Object File Format - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)