Вход в систему

Лекции по курсу "Проектирование ассемблеров, компоновщиков, макропроцессоров"

26. Структура объектных файлов. Формат записи определения имен 'public' (PUBDEF)





Запись PUBDEF содержит список имен 'public'. Для каждого имени приводится три вида данных:

  1. Значение базы для имени public base. Это поле имеет следующий формат:

    Формат поля group index содержит значение от 0 до 32767 включительно. Его ненулевое значение ассоциирует группу с именем, имеющим атрибут 'public', и используется для случая (F2c). Нулевое значение индекса означает отсутствие ассоциируемой группы. Формат поля segment index содержит значение от 0 до 32767 включительно. Ненулевое значение индекса указывает (выбирает) ЛСЕГ. В этом случае поле public offset (смещение имени 'public') содержит смещение имени, указанного в поле public name (имя 'public'), относительно первого байта выбранного ЛСЕГ, при этом поле frame number (номер фрагмента) отсутствует. Нулевое значение индекса означает, что имена имеют абсолютные адреса в памяти. В этом случае индекс группы игнорируется, при этом поле frame number содержит номер фрагмента, а поле public offset смещение. Ненулевое значение индекса группы выбирает группу. Эта группа рассматривается как "фрагмент" для обращений ко всем именам 'public', определенным в этой записи. Сборщик выполняет следующие действия:

    • Любую привязку следующей формы:

          Цель: EI(имя_'public')
          Фрагмент: цель

      сборщик преобразует в форму:

          Цель: SI(имя_сегмента),смещение
          Фрагмент: GI(имя_группы)

      Имя сегмента указывается индексом сегмента, а смещение - полем public offset.

    • Когда сборщик преобразовывает имя 'public', используя значения полей segment index, public offset и возможно frame number, в пару {база:смещение}, то база из этой пары - это база указанной группы.

    Нулевое значение индекса группы не выбирает никакой группы. В качестве базы берется канонический фрагмент сегмента (ЛСЕГ или ФСЕГ), указываемого индексом сегмента.
    Поле public name (имя с атрибутом 'public') должно содержать соответствующее имя длиной в один или несколько символов.

  2. Значение смещения для имени public offset.
    Это поле содержит смещение (16 бит) имени 'public' относительно ЛСЕГ (если индекс сегмента больше нуля) или указанного фрагмента (если индекс сегмента равен нулю).

  3. Тип имени type index.
    Это поле (индекс типа) идентифицирует единственную предшествующую запись TYPDEF (Запись определения типа), которая содержит описание типа объекта, представленного именем 'public'. Сборщик игнорирует это поле.
Введение
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев


исполнялось 0,174378 c, запросов к базе 6