| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
опережающие ссылки. Имена поля записи имеют глобальную область
действия и переопределяться не могут.
"Имя" - это имя типа записи. Далее вы можете использовать
его в модуле для получения различной информации о данных типа за-
писи. Вы можете также использовать имена для этого имена отдель-
ных полей записи. Значения и выражения размера не могут быть от-
носительными и иметь опережающие ссылки. Имена полей записи
являются по области действия глобальными и переопределяться не
могут.
Вы можете переопределить тип записи и определить в модуле
одно и то же имя, как данные типа записи, несколько раз.
Вы можете также использовать имена типов записи для создания
переменных и выделения памяти. Подробности можно найти в Главе
12.
Турбо Ассемблер обеспечивает для полей записи специальную
поддержку, которая представляет флаги и данные перечислимого ти-
па. Более эффективный доступ к полям записи обеспечивают расши-
ренные и дополнительные инструкции. Эта концепция описывается в
Главе 13.
Для определений данных типа записи, требующих большого числа
полей, в Турбо Ассемблере предусмотрен расширенный синтаксис,
аналогичный синтаксису перечислимого типа данных. Например, все
следующие определения типа данных эквивалентны:
Турбо Ассемблер 3.0/tasm/#1-2 = 154 =
foo RECORD f1:1,f2:2,f3:3,f4:4 ; исходная версия
foo RECORD { ; версия, использующая
f1:1, ; несколько строк
f2:2,
f3:3,
f4:4
}
foo RECORD f1:1,f2:2, { ; более компактная версия
f3:3,f4:4 }
Определение структур и объединений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Структуры и объединения позволяют вам совмещать и наклады-
вать друг на друга данные различного типа. Структура в Турбо Ас-
семблер представляет собой тип данных, который содержит один или
более элементов структуры. Структуры отличаются от записей, пос-
кольку элементы структуры занимают всегда целое число байт, а за-
писи описывают поля с произвольным числом бит. Размер структуры
равен общему размеру всех входящих в нее элементов.
Объединения аналогичны структурам, но все элементы объедине-
ния занимают одну и ту же область памяти. Размер объединения ра-
вен размеру наибольшего элемента объединения. Объединения полезно
использовать, когда блок памяти должен предоставлять несколько
разных возможностей, для каждой из которых требуется разная па-
мять.
Турбо Ассемблер позволяет вам полностью вкладывать структуры
и объединения друг в друга, но это может привести в чрезмерной
сложности. Например, вы можете получить элемент структуры, кото-
рый на самом деле является объединением. В качестве элемента объ-
единения можно также использовать структуры.
Турбо Ассемблер 3.0/tasm/#1-2 = 155 =
Открытие определения структуры или объединения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В режиме Ideal для открытия определения данных типа структу-
ры или объединения используется следующий синтаксис:
STRUC имя или UNION имя
В режиме MASM то же самое можно сделать с помощью следующего
синтаксиса:
имя STRUC или имя UNION
Турбо Ассемблер рассматривает все данные или код между отк-
рытым определением структуры и соответствующей директивой ENDS
как часть данного типа структуры или объединения.
Турбо Ассемблер интерпретирует имена типов данных структуры
или объединения как глобальные, но переопределяемые. В модуле вы
можете несколько раз определить структурный тип или тип объедине-
ния с одни и тем же именем.
Турбо Ассемблер 3.0/tasm/#1-2 = 156 =
Задание элементов структуры и объединения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Турбо Ассемблер включает данные в структуры или объединения
построчно. Для выделения памяти для данных и создания элементов
при определении структуры и объединения используются те же дирек-
тивы, что и для выделения данных и создания меток в открытом сег-
менте. Например, директива:
member1 DW 1
одинаково допустима в сегменте и в определении структуры. В сег-
менте данный оператор означает "зарезервировать слово со значени-
ем 1 и именем member1". В определении структуры или объединения
это означает "зарезервировать слово с начальным значением 1 и
именем элемента member1".
Если в сегменте или структуре выделяется экземпляр структуры
или объединения, вы можете использовать начальное значение эле-
мента структуры. Если вы не распределять элементы структуры таким
образом, для указания этого используйте в качестве значения дан-
ных символ ? (символ неинициализированных данных).
Турбо Ассемблер позволяет использовать в определении струк-
туры все методы выделения данных, включая экземпляры других
структур, объединений, записей, перечислимых типов данных, таблиц
и объектов. Более подробно о выделении данных рассказывается в
Главе 12.
В режимах MASM и Ideal имена элементов структур интерпрети-
руются по-разному. В режиме MASM имена элементов структур являют-
ся глобальными и не могут переопределяться. В режиме Ideal имена
элементов структур считаются локальными для структуры или объеди-
нения.
Турбо Ассемблер 3.0/tasm/#1-2 = 157 =
Определение меток элементов структур с помощью директивы LABEL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директива LABEL позволяет вам создавать элементы структур
без выделения данных. Обычно LABEL задает метку с именем или мар-
кер в той точке, где она обнаруживается в сегменте. Директива
LABEL внутри определения структуры определяет элементы этой
структуры. Приведем синтаксис директивы LABEL:
LABEL имя сложный_тип
В режиме MASM вы можете использовать следующий синтаксис:
имя LABEL сложный_тип
где "имя" - это имя элемента структуры. "Тип" - это желаемый тип
элемента структуры. Он может представлять собой любое допустимое
имя типа. Описание имеющихся спецификаторов типов можно найти в
Главе 5.
Выравнивание элементов структуры
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В определения структуры для выравнивания элементов структур
на соответствующие границы можно использовать директиву ALIGN.
Например:
ALIGN 4 ; выравнивание на границу двойного слова
member dd ? ; member будет выравниваться на DWORD
Турбо Ассемблер 3.0/tasm/#1-2 = 158 =
Закрытие определения структуры или объединения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
После того, как вы определите все элементы структуры или
объединения, нужно закрыть определение структуры или объединения.
Для этого используется директива ENDS.
В режиме Ideal директива ENDS имеет следующий синтаксис:
ENDS [имя]
В режиме MASM вы можете использовать синтаксис:
имя ENDS
где "имя" (если оно присутствует) соответствует имени открытого
определения структуры или объединения. Если имя не указано, то
закрывается открытая в данный момент структура или объединение.
Вы можете также использовать директиву ENDS для закрытия
сегментов. Это не приводит к конфликту, поскольку открытие сег-
мента внутри структуры или объединения не допускается.
Вложенные структуры и объединения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Турбо Ассемблер позволяется для управления смещениями, прис-
ваевыми элементам структуры, использовать вложенные директивы
STRUC, UNION и ENDS внутри открытого определения данных типа
|
adfun.ru
|
|
|
|