Данные типа записи представляют собой набор битовых полей. Каждое битовое поле имеет заданную длину (в битах) и начальное значение. Размер данных типа записи равен сумме длин всех полей.
Вы можете использовать данные типа записи для максимально компактного представления данных. Например, можно представить группу из 16 флагов (каждый из которых может быть либо установлен (ON), либо сброшен (OFF)) как 16 отдельных бит, 16 отдельных слов, или как запись, содержащую 16 1-битовых полей (наиболее эф- фективный метод).
Приведем синтаксис описания данных типа записи режима Ideal:
RECORD имя [поле_записи [,поле_записи.]]
В режиме MASM этот синтаксис имеет вид:
имя RECORD [поле_записи [,поле_записи.]]
Каждое "поле_записи" имеет следующий синтаксис:
имя_поля : размер_выражения [=значение]
где "имя_поля" - это имя поля записи. Турбо Ассемблер будет выде- лять для него битовое поле размером "размер_выражения". "Значе- ние" и размер выражений не могут быть относительными или иметь опережающие ссылки. Имена поля записи имеют глобальную область действия и переопределяться не могут.
"Имя" - это имя типа записи. Далее вы можете использовать его в модуле для получения различной информации о данных типа за- писи. Вы можете также использовать имена для этого имена отдель- ных полей записи. Значения и выражения размера не могут быть от- носительными и иметь опережающие ссылки. Имена полей записи являются по области действия глобальными и переопределяться не могут.
Вы можете переопределить тип записи и определить в модуле одно и то же имя, как данные типа записи, несколько раз.
Вы можете также использовать имена типов записи для создания переменных и выделения памяти. Подробности можно найти в Главе 12.
Турбо Ассемблер обеспечивает для полей записи специальную поддержку, которая представляет флаги и данные перечислимого ти- па. Более эффективный доступ к полям записи обеспечивают расши- ренные и дополнительные инструкции. Эта концепция описывается в Главе 13.
Для определений данных типа записи, требующих большого числа полей, в Турбо Ассемблере предусмотрен расширенный синтаксис, аналогичный синтаксису перечислимого типа данных. Например, все следующие определения типа данных эквивалентны:
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 }