Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Директивы определения сегментов и групп



Упрощенное описание сегментов, используемое с указанием стандартной модели памяти, в большинстве случаев с успехом применяется в прикладных программах. Однако такое описание ограничивает гибкость в употреблении сегментов. Если требуется осуществлять полный контроль всех аспектов создания сегментов, необходимо пользоваться соответствующими директивами. Директива SEGMENT открывает сегмент. Любые команды или данные, следующие за этой директивой, помещаются в указанный сегмент до тех пор, пока не встретится директива ENDS, закрывающая сегмент.

В режиме IDEAL директива имеет следующий формат:

SEGMENT <имя> [<выравнив.><объединение><размер><'класс'><доступ>]

В режиме MASM синтаксис более естественный:

<имя> SEGMENT [<атрибуты>]

Имя – обязательный параметр, являющийся именем, определяемым пользователем, атрибуты - необязательные параметры, указывающие на некоторые свойства сегмента. Атрибуты определяют выравнивание сегмента в памяти на границе байта, слова, двойного слова, параграфа (16 байт) или страницы (256 байт). Другие атрибуты определяют способ, объединения сегмента с другими сегментами с тем же именем и классом сегмента.

Атрибуты выравнивания сегмента:

BYTE – сегмент может начинаться с любого адреса;

WORD – сегмент начинается на границе следующего слова;

DWORD – сегмент начинается на границе двойного слова;

PARA – используется по умолчанию, сегмент начинается на границе параграфа;

PAGE – сегмент начинается на границе страницы (256 байт);

MEMPAGE – сегмент начинается на границе страницы памяти (4 К байт).

Некоторые значения атрибута объединения:

PRIVATE – сегмент не будет объединяться с другими сегментами, находящимися в других модулях и имеющих то же имя, используется по умолчанию;

PUBLIC – сегмент будет объединяться с одноименными сегментами из других модулей в один сегмент;

MEMORY – идентичен PUBLIC, сегмент объединяется при компоновке с одноименными сегментами;

STACK – сегмент стека в явном виде должен быть отмечен с помощью этого атрибута при полном описании сегментов;

COMMON – одноименные сегменты начинаются по одному и тому же адресу, они будут занимать перекрывающуюся разделяемую область памяти;

AT <выражение> - сегмент размещается по абсолютному адресу параграфа, определяемому выражением.

Атрибуты размера:

USE16 – устанавливается по умолчанию, позволяет 16-разрядное внутрисегментное смещение и ограничивает размер сегмента в 64К байт;

USE32 - позволяет 32-разрядное смещение и ограничивает размер сегмента в 4Гбайт.

Атрибут класса представляет собой заключенное в апострофы имя, которое позволяет компоновщику группировать сегменты с одинаковым классом.

Атрибут доступа может принимать следующие значения:

EXECONLY – сегмент может содержать только код;

EXECREAD - сегмент может содержать код и данные только для чтения;

READONLY - сегмент может содержать только данные для чтения;

READWRITE - сегмент может содержать только изменяемые данные.

Формат завершающей сегмент директивы END в режиме IDEAL:

ENDS [<имя>], в режиме MASM: <имя> ENDS, где <имя.> имя сегмента, использованное в директиве SEGMENT.

В кодовом сегменте должна присутствовать директива ASSUME, связывающая имена сегментных регистров с именами сегментов, формат для разных режимов компилятора одинаковый:

ASSUME <сег._рег.>:<имя>[,…]

Директива GROUP используется для помещения сегментов в группу. Группа позволяет обеспечить доступ к данным всех сегментов, которые находятся в группе, с помощью одной загрузки адреса группы в сегментный регистр. Формат директивы:

GROUP <имя_группы> <имя>[,…]

где <имя_группы> - имя, определяемое пользователем, а <имя> – имя сегмента, использованное в директиве SEGMENT.

Квадратные скобки означают, что за первым обязательным аргументом директивы через запятую может следовать очередной аналогичный по смыслу аргумент.





Дата публикования: 2015-10-09; Прочитано: 294 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...