Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
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
Использование моделей памяти программы и сегментации



Упрощенные сегментные директивы


После выбора модели памяти вы можете использовать упрощенные сегментные директивы для того, чтобы начинать отдельные сегменты. Эти упрощенные директивы вы можете использовать только после директивы MODEL, которая задает для модуля модель памяти. В модуле допускается указывать столько директив сегментации, сколько необходимо. Турбо Ассемблер для получения одного сегмента комбинирует все части с одинаковыми именами (как если бы вы ввели все эти фрагменты после одной директивы сегментации). Перечень директив содержится в этой таблице.


ДирективаОписание
CODESEG [имя]Начинает или продолжает сегмент кода модуля. Для моделей с дальним типом кода вы можете задать имя, являющееся фактическим именем сегмента. Заметим, что таким образом вы можете генерировать для модуля более одного сегмента кода.
.CODE [имя] DATASEGЭквивалентна директиве CODESEG. Допускается только для режима MASM. Начинает или продолжает ближний или инициализируемый по умолчанию сегмент данных.
.DATA CONSTЭквивалентна директиве DATASEG. Допускается только для режима MASM. Начинает или продолжает сегмент констант модуля. Постоянные данные всегда являются ближними (NEAR) и эквивалентны инициализированным данным.
.CONST UDATASEGЭквивалентна директиве CONST. Допускается только для режима MASM. Начинает или продолжает ближний или не инициализируемый по умолчанию сегмент данных. Соблюдайте осторожность и включайте в этот сегмент только неинициализированные данные, в противном случае получаемая выполняемая программа будет иметь больший чем нужно размер. Описание распределения неинициализированных данных можно найти в Главе 12.
.FARDATA? [имя]Эквивалентна UFARDATA. Действует только в режиме MASM.
.DATA?Эквивалентна директиве UDATASEG. Действует только для режима MASM.
STACK [размер]Начинает или продолжает сегмент стека модуля. Необязательный параметр "размер" определяет объем резервируемой для стека памяти (в словах). Если вы не задаете размер, Турбо Ассемблер резервирует по умолчанию 200h слов (1 килобайт).

В режиме MASM все метки, код или данные, следующие за оператором STACK, не будут рассматриваться как часть сегмента стека. Однако в режиме Ideal резервируется специальная область, и сегмент стека остается открытым, благодаря чему вы можете добавлять метки и другие неинициали зированные данные.

Директивы стека обычно требуется использовать, если вы пишете на языке Ассемблера автономную программу. Большинство языков высокого уровня сами создают для вас стек.
.STACK [размер]Эквивалентна директиве STACK. Действует в режиме MASM.
FARDATE [имя]Начинает или продолжает дальний неинициализированный сегмент данных (FAR) с заданным именем. Если вы не задаете имя, Турбо Ассемблер использует сегментное имя FAR_DATA. В модуле может содержаться более одного неинициализированного сегмента данных типа FAR.
.FARDATA [имя]Эквивалентна FARDATA. Действует в режиме MASM.
UFARDATAНачинает или продолжает дальний неинициализированный сегмент данных с заданным именем. Если вы не задаете имя, то Турбо Ассемблер использует имя сегмента FAR_BSS. В модуле у вас может быть несколько неинициализированных сегментов данных типа FAR.



Примечание: Если вам требуется знать фактические имена, имена классов и выравнивание сегментов, создаваемых по упрощенным директивам сегментации, см. тут.


Идентификаторы, создаваемые упрощенными директивами сегментации


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


Идентификаторы упрощенных директив сегментации
ИдентификаторЗначение
@codeСегмент или группа, которые подразумеваются для сегмента CS.
@dataСегмент или группа, которые подразумеваются для сегмента DS.
@fardata Имя текущего сегмента FARDATA.
@fardata?Имя текущего сегмента UFARDATA.
@cursegИмя текущего сегмента.
@stackСегмент или группа, которые подразумеваются для сегмента SS.



Директива STARTUPCODE


Директива STARTUPCODE обеспечивает код инициализации, соответствующий текущей модели и операционной системе. Она отмечает также начало программы. Эта директива имеет следующий синтаксис:


STARTUPCODE


или


.STARTUP ; (только для режима MASM)


Директива STARTUPCODE инициализирует регистры DS, SS и SP. Для моделей SMALL, MEDUIUM, COMPACT, LARGE, HUGE и TPASCAL Турбо Ассемблер устанавливает DS и SS в @data, а SP - в конец стека. Для моделей TINY и TCHUGE директива STARTUPCODE не изменяет сегментных регистров.


Идентификатор @Startup


Идентификатор @Startup помещается в начало кода инициализации, который генерируется по директиве STARTUPCODE. Он представляет собой ближнюю метку, отмечающую начало программы.


Директива EXITCODE


Директива EXITCODE используется для генерации кода завершения, соответствующего текущей операционной системе. Вы можете использовать ее в модуле несколько раз (для каждой точки входа). Эта директива имеет следующий синтаксис:


EXITCODE [возвращаемое_значение]


В режиме MASM вы можете использовать следующий синтаксис:


.EXIT [возвращаемое_значение]


Необязательное "возвращаемое_значение" описывает число, которое должно возвращаться в операционную систему. Если вы не задаете возвращаемое значение, Турбо Ассемблер предполагает, что это значение содержится в регистре AX.


<<<  НазадВперед  >>>
 1  2  3  4  5  6  7 


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

8  В тему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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