| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Цель: SI(имя сегмента), смещение Т0
Цель: GI(имя группы), смещение Т1
Цель: EI(внешнее имя), смещение Т2
Цель: SI(имя сегмента) Т4
Цель: GI(имя группы) Т5
Цель: EI(внешнее имя) Т6
______________________________________________________
Примеры:
Цель: SI(CODE),1024 - 1025-ый байт в сегменте
CODE.
Цель: GI(DATAAREA) - Позиция в MAS группы с
именем DATAAREA.
Цель: EI(SIN) - Адрес внешней процедуры
SIN.
Цель: EI(PAYSCHEDULE),24 - 24-ый байт во внешней
структуре данных
PAYSCHEDULE.
г) Каждая ячейка памяти, к которой происходит обращение
содержится в том или ином фрагменте. Этот фрагмент
определяется содержимым сегментного регистра. Для
формирования корректной ссылки к памяти, сборщик
должен знать цель и фрагмент, к которому выполняется
обращение. Существует пять способов определения
фрагмента. При этом используются индекс Х и данные
(необязательно):
Метод Определение фрагмента
______________________________________________________
(F0) Х - это индекс сегмента. Фрагментом
является канонический фрагмент логического
сегмента, идентифицируемого индексом
сегмента.
(F1) Х - это индекс группы. Фрагментом является
канонический фрагмент группы.
(F2) Х - это индекс внешнего имени. Фрагмент
определяется, когда сборщик находит
определение внешнего имени как 'public'.
При этом существует две ситуации:
(F2a) - Отсутствие ассоциированной группы.
Фрагментом является канонический
фрагмент логического сегмента,
связанного с внешним именем.
(F2c) - ЛСЕГ входит в группу. Фрагментом
является канонический фрагмент
группы. (Группа указана в поле
GROUP_INDEX записи PUBDEF).
(F4) Нет индекса. Фрагмент это канонический
фрагмент логического сегмента, содержащего
адресное поле.
(F5) Нет индекса. Цель определяет фрагмент. При
возможны три ситуации:
(F5a) - Цель определяет индекс сегмента.
Фрагмент определяется способом (F0).
(F5b) - Цель определяет индекс группы.
Фрагмент определяется способом (F1).
(F5c) - Цель определяет индекс внешнего
имени. Фрагмент определяется
способом (F2).
______________________________________________________
Ниже приведена номенклатура определений фрагмента:
Фрагмент: SI (Имя сегмента) (F0)
Фрагмент: GI (Имя группы) (F1)
Фрагмент: EI (Внешнее имя) (F2)
Фрагмент: Адресное поле (F4)
Фрагмент: Цель (F5)
Фрагмент: - (F6)
Таким образом, при внутрисегментных ссылках фрагментом
обычно является канонический фрагмент логического сегмента,
содержащего адресное поле. Аналогично, фрагментом при
межсегментных ссылках является канонический фрагмент
логического сегмента, содержащего цель.
7.3.1. Внутрисегментная привязка
ДДДДДДДДДДДДДДДДДДДДДДДДД
Внутрисегментная привязка выполняется следующим образом.
Если адресное поле или цель находятся вне указанного
фрагмента, то сборщик выдает предупреждение. В противном
случае смещение цели относительно фрагмента будет равно сумме
значений регистра IP на момент ссылки (указывает на байт,
содержащий код следующей команды) и указываемого смещения.
- Если адресное поле представляет собой смещение, то
сборщик прибавляет его (по модулю 65536) к значению IP.
- Если адресное поле это младший байт, то сборщик
прибавляет его (по модулю 256) к значению IP.
- Если адресное поле это база, указатель или старший байт,
то намерения транслятора неясны, а действия сборщика
неопределены.
7.3.2. Межсегментная привязка
ДДДДДДДДДДДДДДДДДДДДДД
Межсегментная привязка выполняется следующим образом.
Неотрицательный 16-битовый номер, FBVAL, определен, как
номер фрагмента или значение селектора, указанных при
привязке. Знаковый 20-битный номер, FOVAL, определен, как
расстояние между базой фрагмента и целью. Если этот 20-битный
номер меньше 0 или больше 65535, то сборщик выдает сообщение
об ошибке. В противном случае сборщик использует значения
FBVAL и FOVAL для привязки адресного поля следующим образом.
- Если адресное поле это указатель, то сборщик прибавляет
FBVAL (по модулю 65536) к старшему слову указателя, а
FOVAL (по модулю 65536) к младшему слову указателя.
- Если адресное поле это база, то сборщик прибавляет
FBVAL (по модулю 65536) к базе и игнорирует FOVAL.
- Если адресное поле это смещение, то сборщик прибавляет
FOVAL (по модулю 65536) к смещению и игнорирует FBVAL.
- Если адресное поле это старший байт, то сборщик
прибавляет (FOVAL/256)(по модулю 256) к старшему байту
и игнорирует FBVAL. (При делении берется только целое).
- Если адресное поле это младший байт, то сборщик
прибавляет (FOVAL/256)(по модулю 256) к младшему слову
и игнорирует FBVAL.
7.4. Последовательность записей
НННННННННННННННННННННННННН
Ниже приведен допустимый порядок следования записей в
объектном модуле.
_________________________________________________________
Примечание
Описательный язык, используемый в
нижеприведенной синтаксической схеме подробно
рассматривается в WIRTH: CAMC, November 1977,
том 20, N 11, стр. 822-823. Сами записи
(выделены заглавными буквами) рассматриваются в
следующих разделах.
_________________________________________________________
object file = tmodule
tmodule = {THEADR | LHEADR} seg-grp {component} modtail
seg-grp = {LNAMES} {SEGDEF} {EXTDEF | GRPDEF}
component = data | debug-record
data = content-def | thread-def |
PUBDEF | EXTDEF | COMDEF | LOCSYM
debug-record = LINNUM
content-def = data-record {FIXUPP}
thread-def = FIXUPP (содержащая только поля thread)
data-record = LIDATA | LEDATA
modtail = MODEND
- Запись FIXUPP всегда относится к предыдущей записи данных.
- Все записи LNAMES, SEGDEF, GRPDEF и EXTDEF должны
предшествовать всем записям, обращающимся к ним.
- Запись комментариев может быть в любом месте файла.
Однако она не может быть первой или последней записью
файла, а также входить в content-def.
7.5. Форматы записей
ННННННННННННННН
Далее в книге излагаются форматы записей в схематической
форме. Первым приводится формат записи примера для введения
основных понятий и терминов.
7.5.1. Формат записи примера (SAMREC)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
|
adfun.ru
|
|
|
|