adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
7.2.1. Определение сегмента
ДДДДДДДДДДДДДДДДДДДД
Модуль представляет собой совокупность объектного кода,
описываемую последовательностью записей, создаваемых
транслятором. Объектный код представляет собой непрерывные
участки памяти, содержимое которых определяется во время
трансляции. Этими участками являются логические сегменты.
Модуль определяет атрибуты каждого ЛСЕГ. Запись определения
сегмента (SEGDEF) содержит всю информацию по ЛСЕГ (имя,
длина, выравнивание и т.п.). Сборщик запрашивает эту
информацию, когда комбинирует различные ЛСЕГ и устанавливает
сегментную адресацию. SEGDEF всегда следует за заголовочной
записью.
7.2.2. Адресация сегмента
ДДДДДДДДДДДДДДДДДД
Механизм адресации микропроцессора 8086 обеспечивает
адресацию 64К памяти в каждом из четырех фрагментов,
адресуемых базовыми регистрами - CS (регистр сегмента кодов),
DS и ES (регистры сегмента данных) и SS (регистр стэкового
сегмента).
Возможное количество ЛСЕГ, составляющих образ памяти,
чаще всего намного превышает количество имеющихся сегментных
(базовых) регистров. Поэтому при модульном программировании,
когда собираются множество небольших ЛСЕГ, требуется частая
перезагрузка базовых регистров.
Разумеется, такая перезагрузка нежелательна. Лучше всего
собирать небольшие по размеру ЛСЕГ вместе в один блок,
помещающийся в одном фрагменте. В этом случае все ЛСЕГ можно
адресовать, использую один и тот же базовый регистр. Таким
блоком и является группа (см. Раздел 7.1.1).
Для введения взаимной адресации внутри группы, вы должны
явно определить каждую группу в модуле. Запись определения
группы (GRPDEF) как раз предназначена для этого и содержит
список имен сегментов.
GRPDEF следует сразу за всеми SEGDEF, т.к. GRPDEF
обращается к ним для описания группы. Все остальные записи
идут после GRPDEF.
7.2.3. Определение имен
ДДДДДДДДДДДДДДДД
Определение имен осуществляется с помощью трех типов
записей - PUBDEF, COMDEF и EXTDEF.
7.2.4. Индексы
ДДДДДДД
Понятие индекс понимается в этой главе, как целое,
указывающее на конкретный элемент из списка элементов.
Например, индекс имени, индекс сегмента, индекс группы,
индекс типа и т.п.
_________________________________________________________
Примечание
Индекс обычно положительное число. Значение ноль
зарезервировано и может нести особый смысл, в
зависимости от типа индекса (например, нулевой
индекс сегмента указывает на абсолютный псевдо-
сегмент без имени; нулевой индекс типа указывает
на тип "без типа".
_________________________________________________________
В целом, значения индексов в объектных файлах обычно не
превышают 50-100, поэтому отводимая для них память также не
превышает 1-2 байта.
Если старший бит первого (и возможно единственного)
байта равен нулю, то значение индекса варьируется в пределах
0-127 и занимает один байт. Если этот бит равен 1, то
значение индекса это число, между 0 и 32К-1, занимающее два
байта и определяемое следующим образом: младшие восемь бит во
втором байте, а старшие семь бит в первом байте.
7.3. Концепция привязки
НННННННННННННННННН
Привязка это адресная привязка объектного кода,
запрашиваемая транслятором и выполненная сборщиком.
Для специфицирования привязки необходимо указать четыре
типа данных:
- Место и тип привязываемого адресного поля.
- Один из двух возможных режимов привязки.
- Цель, т.е. адрес в памяти к которому обращается
адресное поле.
- Фрагмент, к которому имеет место обращение.
а) Существует пять типов адресных полей:
- Указатель (старшее слово имеет больший адрес).
- База это старшее слово указателя (сборщику
безразлично, есть ли младшее слово указателя или
нет).
- Смещение это младшее слово указателя (сборщику
безразлично, следует ли за ним старшее слово).
- Старший байт это старший байт смещения (сборщику
безразлично, предшествует ли младший байт).
- Младший байт это младший байт смещения (сборщику
безразлично следует ли за ним старший байт).
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДї
Указатель: і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ЪДДДДДДДДДДДДї
База: і і
АДДДДДДДДДДДДЩ
ЪДДДДДДДДДДДДДї
Смещение: і і
АДДДДДДДДДДДДДЩ
ЪДДДДДДї
Старший байт: і і
АДДДДДДЩ
ЪДДДДДДї
Младший байт: і і
АДДДДДДЩ
Тип адресного поля указывается в поле LOC поля LOCAT
записи FIXUPP, а его местоположение - в поле
DATA_RECORD_OFFSET того же поля LOCAT.
б) Сборщик Microsoft linker выполняет привязку в одном
из двух режимов:
- Внутрисегментный режим используется для привязки
8-битовых и 16-битовых смещений, указываемых в
командах CALL, JUMP и JUMP SHORT.
- Межсегментный режим используется при всех других
режимах адресации (8086).
в) Цель это объект в MAS к которому осуществляется
обращение (точнее, самый младший байт этого объекта).
Сборщик определяет цель одним из шести способов,
причем три способа из указанных являются основными.
Каждый из основных способов использует два вида данных
- индекс Х и смещение D:
Метод Определение цели
______________________________________________________
(Т0) Х - это индекс сегмента. Цель это D-ный байт
в логическом сегменте, идентифицируемом
индексом сегмента.
(Т1) Х - это индекс группы. Цель это D-ный байт
в логическом сегменте,
идентифицируемом индексом группы.
(Т2) Х - это индекс внешнего имени. Этот индекс
идентифицирует внешнее имя, которое, в свою
очередь, дает адрес соответствующего байта.
Целью является байт, D-ный после указанного.
______________________________________________________
Остальные способы используют только один вид данных -
индекс Х, т.е. смещение D считается равным нулю.
Метод Определение цели
______________________________________________________
(Т4) Х - это индекс сегмента. Цель это первый
байт в ЛСЕГ, идентифицируемом индексом
сегмента.
(Т5) Х - это индекс группы. Цель это первый байт
в логическом сегменте указанной группы.
Этот ЛСЕГ идет первым в группе.
(Т6) Х - это индекс внешнего имени. Целью
является байт, который адресуется внешним
именем, которое, в свою очередь,
идентифицируется индексом внешнего имени.
_______________________________________________________
Таким образом, определение цели можно записать
следующим образом:
Номенклатура Метод
______________________________________________________
|
adfun.ru
|
|
|
|