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

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

18. Идентификация модуля и атрибуты

 

Заголовочная запись модуля содержит имя модуля и всегда идет первой в модуле. Кроме этого модуль может представлять собой главную программу (main) с указанием стартового адреса. При сборке различных модулей, можно указать только один модуль, имеющий атрибут main. Если таковых будет несколько, то главным будет считаться первый. Таким образом, модули могут или не могут быть главными и могут иметь или не могут иметь стартовый адрес.

Определение сегмента. Модуль представляет собой совокупность объектного кода, описываемую последовательностью записей, создаваемых транслятором. Объектный код представляет собой непрерывные участки памяти, содержимое которых определяется во время трансляции. Этими участками являются логические сегменты.
Модуль определяет атрибуты каждого ЛСЕГ. Запись определения сегмента (SEGDEF) содержит всю информацию по ЛСЕГ (имя, длина, выравнивание и т.п.). Сборщик запрашивает эту информацию, когда комбинирует различные ЛСЕГ и устанавливает сегментную адресацию. SEGDEF всегда следует за заголовочной записью.

Адресация сегмента. Механизм адресации микропроцессора 8086 обеспечивает адресацию 64К памяти в каждом из четырех фрагментов, адресуемых базовыми регистрами - CS (регистр сегмента кодов), DS и ES (регистры сегмента данных) и SS (регистр стекового сегмента).
Возможное количество ЛСЕГ, составляющих образ памяти, чаще всего намного превышает количество имеющихся сегментных (базовых) регистров. Поэтому при модульном программировании, когда собираются множество небольших ЛСЕГ, требуется частая перезагрузка базовых регистров.
Разумеется, такая перезагрузка нежелательна. Лучше всего собирать небольшие по размеру ЛСЕГ вместе в один блок, помещающийся в одном фрагменте. В этом случае все ЛСЕГ можно адресовать, используя один и тот же базовый регистр. Таким блоком и является группа.
Для введения взаимной адресации внутри группы необходимо явно определить каждую группу в модуле. Запись определения группы (GRPDEF) как раз предназначена для этого и содержит список имен сегментов.
GRPDEF следует сразу за всеми SEGDEF, так как GRPDEF обращается к ним для описания группы. Все остальные записи идут после GRPDEF.
Определение имен осуществляется с помощью трех типов записей - PUBDEF, COMDEF и EXTDEF.

Определение имен. Определение имен осуществляется с помощью трех типов записей - PUBDEF, COMDEF и EXTDEF.

Индексы. Понятие индекс понимается как целое, указывающее на конкретный элемент из списка элементов. Например, индекс имени, индекс сегмента, индекс группы, индекс типа и т.п.
Примечание. Индекс обычно положительное число. Значение «ноль» зарезервировано и может нести особый смысл в зависимости от типа индекса (например, нулевой индекс сегмента указывает на абсолютный псевдосегмент без имени; нулевой индекс типа указывает на тип "без типа".
В целом, значения индексов в объектных файлах обычно не превышают 50- 100, поэтому отводимая для них память также не превышает 1-2 байта.
Если старший бит первого (и возможно единственного) байта равен нулю, то значение индекса варьируется в пределах 0-127 и занимает 1 байт. Если этот бит равен 1, то значение индекса это число, между 0 и 32К-1, занимающее 2 байта и определяемое следующим образом: младшие восемь бит во втором байте, а старшие семь бит в первом байте.

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


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