49. Директивы сегментации
49. Директивы сегментации
Сегментация является частью более общего механизма, связанного с концепцией модульного программирования. Она предполагает унификацию оформления объектных модулей, создаваемых компилятором, в том числе с разных языков программирования. Это позволяет объединять программы, написанные на разных языках. Именно для реализации различных вариантов такого объединения и предназначены операнды в директиве SEGMENT.
Рассмотрим их подробнее.
1. Атрибут выравнивания сегмента (тип выравнивания) сообщает компоновщику о том, что нужно обеспечить размещение начала сегмента на заданной границе:
1) BYTE – выравнивание не выполняется;
2) WORD – сегмент начинается по адресу, кратному двум, т. е. последний (младший) значащий бит физического адреса равен 0 (выравнивание на границу слова);
3) DWORD – сегмент начинается по адресу, кратному четырем;
4) PARA – сегмент начинается по адресу, кратному 16;
5) PAGE – сегмент начинается по адресу, кратному 256;
6) MEMPAGE – сегмент начинается по адресу, кратному 4 Кбайт.
2. Атрибут комбинирования сегментов (комбинаторный тип) сообщает компоновщику, как нужно комбинировать сегменты различных модулей, имеющие одно и то же имя:
1) PRIVATE – сегмент не будет объединяться с другими сегментами с тем же именем вне данного модуля;
2) PUBLIC – заставляет компоновщик соединить все сегменты с одинаковыми именами;
3) COMMON – располагает все сегменты с одним и тем же именем по одному адресу;
4) AT xxxx – располагает сегмент по абсолютному адресу параграфа;
5) STACK – определение сегмента стека.
3. Атрибут класса сегмента (тип класса) – это заключенная в кавычки строка, помогающая компоновщику определить соответствующий порядок следования сегментов при собирании программы из сегментов нескольких модулей.
4. Атрибут размера сегмента:
1) USE16 – это означает, что сегмент допускает 16-разрядную адресацию;
2) USE32 – сегмент будет 32-разрядным. Необходимо как-то компенсировать невозможность
напрямую управлять размещением и комбинированием сегментов. Для этого стали использовать директиву указания модели памяти MODEL. Эта директива связывает сегменты, которые в случае использования упрощенных директив сегментации имеют предопределенные имена, с сегментными регистрами (хотя явно инициализировать ds все равно придется).
Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля. Предполагается, что программный модуль может иметь только определенные типы сегментов, которые определяются упомянутыми нами ранее упрощенными директивами описания сегментов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Использование директивы typedef
Использование директивы typedef Разработчики ядра не любят определять новые типы с помощью оператора typedef, и причины этого довольно трудно объяснить. Разумное объяснение может быть следующим.• Определение нового типа через оператор typedef скрывает истинный вид структур
9.3.1. HTTP-директивы
9.3.1. HTTP-директивы При подключении к Интернету пользователи первым делом стремятся загрузить Web-страничку. Если используется proxy, то необходимо правильно настроить HTTP-протокол. Для решения этой задачи в squid есть следующие директивы:? http_port n — параметр n определяет номер
9.3.2. FTP-директивы
9.3.2. FTP-директивы Для работы по FTP-протоколу тоже есть несколько директив:? ftp_passive параметр — режим работы. Если в качестве параметра указано значение on, то разрешен пассивный режим (устанавливается по умолчанию).Сервер squid позволяет работать с FTP-протоколом, но может
10.3.4. Информационные директивы
10.3.4. Информационные директивы Эти директивы отвечают за информационные сообщения, которые видит пользователь, работая с вашим FTP-сервером:? banner имя — в качестве имени можно указать текстовый файл, содержимое которого будет передано пользователю во время входа в систему.
16.3.1. Общие директивы
16.3.1. Общие директивы Общие директивы изменяют глобальные параметры сервера — его имя, тип, порт, адрес администратора. Значения, указанные глобальными директивами, влияют на работу всего сервера.? ServerName — директива, которая определяет имя сервера Apache. Здесь должно быть
16.3.2. Директивы протоколирования
16.3.2. Директивы протоколирования Директивы протоколирования управляют процессом протоколирования работы сервера. С их помощью вы можете определить, что нужно записывать в журналы, а что — нет.? HostnameLookups on | off. Сервер Apache ведет журнал доступа других компьютеров. Если вы
16.3.9. Директивы перенаправления
16.3.9. Директивы перенаправления Довольно часто нужно перенаправить пользователя на другой ресурс: например, вы сменили хостера и из-за этого изменилось имя вашего сайта. Обычно при таком «переезде» у вас есть определенное время, чтобы сообщить вашим пользователям об
16.3.10. Директивы обработки ошибок
16.3.10. Директивы обработки ошибок Такая директива всего одна, но она очень полезна. Например, произошла ошибка 404 (файл не найден). Вы можете сопоставить этой ошибке URL, на который будет перенаправлен браузер пользователя. Обычно перенаправление устанавливают на документ,
3. Директивы сегментации
3. Директивы сегментации В ходе предыдущего обсуждения мы выяснили все основные правила записи команд и операндов в программе на ассемблере. Открытым остался вопрос о том, как правильно оформить последовательность команд, чтобы транслятор мог их обработать, а
17. Директивы препроцессора
17. Директивы препроцессора Директивы препроцессора – это особые инструкции, которые записаны в тексте программы на СИ и выполнены до трансляции программы. Директивы препроцессора дают возможность изменить текст программы. Среди таких действий – замена некоторых
Директивы препроцессора C#
Директивы препроцессора C# Подобно многим другим языкам из семейства C, в C# поддерживаются различные символы, позволяющие влиять на процесс компиляции. Перед рассмотрением директив препроцессора C# согласуем соответствующую терминологию. Термин "директива препроцессора
Директивы и атрибуты CIL
Директивы и атрибуты CIL Теперь, когда вы знаете, как использовать ildasm.exe и ilasm.exe в рамках челночной технологии разработки, мы можем заняться непосредственным анализом синтаксиса и семантики CIL. Следующие разделы предлагают описание процесса построения пользовательского
Директивы #if, #elif, #else, #endif
Директивы #if, #elif, #else, #endif Синтаксис:#if <ограниченное-константное-выражение> [<текст>][#elif <ограниченное-константное-выражение> <текст>][#elif <ограниченное-константное-выражение> <текст>][#else <текст>]#endifДиректива #if совместно с директивами #elif, #else и #endif
Директивы #ifdef и #ifndef
Директивы #ifdef и #ifndef Синтаксис:#ifdef <идентификатор>#ifndef <идентификатор>Аналогично директиве #if, за директивами #ifdef и #ifndef может следовать набор директив #elif и директива #else. Набор должен быть завершен директивой #endif.Использование директив #ifdef и #ifndef эквивалентно
1.3. Директивы препроцессора
1.3. Директивы препроцессора Заголовочные файлы включаются в текст программы с помощью директивы препроцессора #include. Директивы препроцессора начинаются со знака "диез" (#), который должен быть самым первым символом строки. Программа, которая обрабатывает эти директивы,
8.6.3. Using-директивы
8.6.3. Using-директивы Пространства имен появились в стандартном С++. Предыдущие версии С++ их не поддерживали, и, следовательно, поставляемые библиотеки не помещали глобальные объявления в пространства имен. Множество программ на С++ было написано еще до того, как