КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Расширенное применение директивы сегментации
Директива SEGMENT имеет расширенный синтаксис, который позволяет управлять взаимным расположением сегментов в многомодульной программе. В общем случае директива SEGMENT имеет следующий вид:
<имя сегмента> SEGMENT [выравнивание>] [<объединение>] ['<класс>'][<размер сегмента>]
Любой из параметров может отсутствовать, но если они заданы, то должны быть перечислены в указанном порядке и разделены пробелами. Параметр "класс" указывает в одиночных кавычках имя класса, к которому относится сегмент. Компоновщик объединяет вместе в памяти все сегменты с одним и тем же именем класса. Все сегменты, для которых класс не указан, считаются относящимися к одному и тому же классу с «пустым» именем. Параметр "объединение" задает способ комбинирования сегментов различных модулей, имеющих одинаковое имя. Значениями атрибута могут быть PRIVATE, PUBLIC, STACK, AT или COMMON (по умолчанию PRIVATE). Значение PRIVATE указывает, что сегмент не будет объединяться ни с какими другими сегментами с тем же именем вне данного модуля. Значение PUBLIC дает указание объединять в один сегмент такие сегменты из любых модулей, у которых одно и то же имя и которые относятся к одному и тому же классу. Объединение нескольких сегментов означает, что сегменты будут расположены в памяти рядом, и смещения всех имен из этих сегментов будут отсчитываться от начала объединенного сегмента. Это позволит один раз установить сегментный регистр на начало общего сегмента и далее, не меняя значение регистра, использовать его для доступа ко всем именам общего сегмента. Значение STACK дает указание объединять одноименные сегменты, и вычисляет адреса в сегментах относительно регистра SS. Объединенный сегмент рассматривается как сегмент стека и на него перед выполнением программы будут установлены регистры SS и SP (на сегмент типа PUBLIC никакие регистры автоматически не устанавливаются). Если имеется несколько таких сегментов, то SS:SP устанавливаются на тот из них, который был обнаружен компоновщиком последним. Значение AT <константное выражение> позволяет расположить сегмент по абсолютному адресу параграфа, заданному константным выражением. Все метки и адреса в сегменте отсчитываются относительно вычисленного адреса. С помощью АТ-сегментов обычно вводятся обозначения для фиксированных участков оперативной памяти (векторов прерываний, видеопамяти). Значение COMMON указывает, что все сегменты с одним и тем же именем и принадлежащие одному и тому же классу должны быть размещены в памяти с одного и того же адреса (с адреса, по которому был размещен первый из таких сегментов), накладывая их содержимое друг на друга. Результирующий сегмент будет иметь длину наибольшего из сегментов. COMMON-сегменты используются, когда одни и те же ячейки памяти желательно именовать по-разному в разных модулях. Параметр "выравнивание" определяет способ выравнивания по заданной границе, т.е. указывает, с адреса какой кратности должен располагаться сегмент (табл. 5.76) (по умолчанию PARA). При правильном выравнивании доступ к данным выполняется быстрее.
Табл. 76. Значения параметра выравнивания.
Параметр "размер сегмента". Для микропроцессоров 386 и выше сегменты могут быть 16 или 32-разрядными: USE16 определяет 16-разрядную адресацию, USE32 – 32-разрядную адресацию.
Дата добавления: 2014-11-16; Просмотров: 515; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |