Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Использование моделей памяти программы и сегментации - Программирование от RIN.RU
Использование моделей памяти программы и сегментации



Переопределение сегмента


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


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


Изменение упорядочивания сегментов в модуле


Порядок сегментов в каждом модуле определяет начальное размещение сегментов в программе компоновщиком. В MASM 1.0 и 2.0 сегменты передавались компоновщику в алфавитном порядке. В Турбо Ассемблере предусмотрены директивы (только в режиме MASM), которые позволяют воспроизвести это поведение.


Заметим, что данные директивы действуют так же, как параметры командной строки /A и /S.


Директива .ALPHA


Директива .ALPHA определяет упорядочивание сегментов по алфавиту. Данная директива сообщает Турбо Ассемблеру, что сегменты в объектном файле нужно разместить в алфавитном порядке (в соответствии с именами сегментов). Она имеет синтаксис:


.ALPHA


Директива .SEQ


Директива .SEQ определяет последовательное упорядочивание сегментов и сообщает Турбо Ассемблеру, что сегменты нужно помещать в объектный файл в том порядке, в котором они встречаются в исходном файле. Поскольку это поведение предполагается Турбо Ассемблером по умолчанию, директиву .SEQ используют обычно только для переопределения предыдущей директивы .ALPHA. Данная директива имеет следующий синтаксис:


.SEQ


Директива DOSSEG: упорядочивание сегментов в порядке DOS


Обычно компоновщик упорядочивает сегменты в последовательном порядке - в том порядке, в котором он их обрабатывает при генерации программы. Если вы включаете в любой модуль программу директиву DOSSEG, то это указывает компоновщику, что вместо этого упорядочивания нужно использовать порядок сегментов, принятый в DOS. Компоновщик при этом выполняет в получаемой программе следующее упорядочивание:


  • сначала идут сегменты с именем класса CODE (обычно сегменты кода);

  • затем следуют сегменты, не имеющие имени класса CODE и не являющиеся частью DGROUP;

  • сегменты, являющиеся частью DGROUP в следующем порядке:


    1. сегменты, не являющиеся классами BSS и STACK (обычно неинициализированные данные);

    2. сегменты класса BSS (обычно инициализированные данные);

    3. сегменты класса STACK (область стека).


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


Сегменты в группе DGROUP располагаются в том порядке, в котором они определены в исходных модулях. Приведем синтаксис DOSSEG:


DOSSEG


Изменение размера стека


Начальный и завершающий код процедур работает с регистрами, указывающими на стек. В процессоре 80386 или 80486 сегменты могут быть 16- или 32-разрядными. Таким образом, перед генерацией корректного начального и завершающего кода Турбо Ассемблеру нужно знать корректный размер стека.


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


В Турбо Ассемблере предусмотрены директивы, которые могут установить или переопределить используемый по умолчанию при генерации начального и завершающего кода размер стека. Список этих директив приведен в следующей таблице:


Директивы модификации размера стека
ДирективаЗначение
SMALLSTACKУказывает, что стек 16-разрядный.
LARGESTACK Указывает, что стек 32-разрядный.



<<<  Назад
 1  2  3  4  5  6  7 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь