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



Определение общих переменных


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


Для определения общей переменной вы можете использовать директиву COMM. Она имеет следующий синтаксис:


COMM определение [,определение].


Каждое "определение" описывает идентификатор и имеет следующий формат:


[расстояние] [язык] имя_идентификатора[[счетчик_1]]:
сложный_тип [счетчик_2]


где поле "расстояние" не является обязательным и может быть FAR или NEAR. Если вы не зададите "расстояние", по умолчанию оно будет соответствовать используемой модели памяти. Если вы не используете упрощенные директивы сегментации, то по умолчанию используется NEAR. В крошечной, малой и средней моделях по умолчанию также используется NEAR, а во всех других - FAR.


Поле "язык" задает язык: C, PASCAL, BASIC, FORTRAN, PROLOG или NOLANGUAGE. Использование в директиве COMM спецификатора языка временно переопределяет текущую установку языка (по умолчанию или заданную с помощью директивы .MODEL). Заметим, что для того, чтобы действовало данное средство, вам не обязательно использовать директиву .MODEL.


Поле "имя_идентификатора" задает имя идентификатора, который должен быть общим, и память для которого должна выделяться на этапе компоновки. В этом поле можно также задавать коэффициент размера элемента массива "счетчик_1", который должен учитываться в вычисляемом объеме общей памяти. Если в качестве расстояния задано FAR, то компоновщик, использует значение "счетчика_2", чтобы указать, сколько имеется элементов с размером, равным произведению основного размера элемента (который определяется его типом) на "счетчик_1". По умолчанию значение поля "счетчик_1" равно 1.


"Сложный_тип" - это тип данных аргумента. Он может быть либо простым типом, либо сложным выражением с указателем. Более подробно о синтаксисе сложного типа рассказывается здесь


Необязательное значение "счетчик_2" определяет, сколько элементов определяет эта общая переменная. Если вы не задаете это поле, то подразумевается значение 1. Полный объем памяти, выделяемой для общей переменной, равен произведению значения "счетчик_2" на длину, заданную полем "тип", и на значение "счетчик_1".


В режиме MASM, предполагается, что общие идентификаторы, описанные вне любого сегмента, должны быть доступны с помощью регистра DS, что не всегда может допустимым предположением. Убедитесь, что вы либо поместили в DS корректное значение сегмента, либо при ссылке на эти переменные используете переопределение сегмента. В режиме Ideal Турбо Ассемблер корректно проверяет, являются ли общие переменные адресуемыми, используя любой из текущих сегментных регистров, описанный в директиве ASSUME.


Приведем пример использования директивы COMM:


COMM buffer:BYTE:512 ; во время компоновки выделяет ся 512 байт
COMM abc[41]:WORD:10 ; на этапе компоновки выделяется память 820 байт (10 элементов из 41 слова каждый)
COMM FAR abc[41]:WORD:10 ; на этапе компоновки выделяется 10 элементов из 82 байт (2 байта * 41 элемент)


Включение библиотеки


В том случае, когда вы знаете, что ваш исходный файл будет всегда использовать подпрограммы заданной библиотеки, можно использовать директиву INCLUDELIB. Директива INCLUDELIB сообщает компоновщику, что нужно включить указанную библиотеку. В режиме Ideal эта директива имеет следующий синтаксис:


INCLUDELIB "имя_файла" ; обратите внимание на кавычки!


а в режиме MASM:


INCLUDELIB имя_файла


где "имя_файла" - это имя библиотеки, которую вы хотите включать с помощью компоновщика на этапе компоновки. Если вы не укажете в заданном имени файла расширение, то компоновщик подразумевает расширение .LIB.


Приведем пример:


INCLUDELIB "diskio" ; включает DISKIO.LIB

<<<  Назад
 1  2  3 


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

8  В тему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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