Включение одной именованной структуры в другую
Чтобы способствовать наследованию объектов, Турбо Ассемблер обеспечивает способ, при котором весь тип данных структуры или объединения, включая имена элементов, встраивается в открытое определение структуры. Он интерпретирует встроенную структуру или объединение, как если бы они были вложены в этой точке внутри открытого определения структуры или объединения. Таким образом, встраивание одной структуры или объединения в другую принципиально отличается от включения в структуру или объединение экземпляра другой структуры или объединения: экземпляр включает в себя только инициализированные или неинициализированные данные, в то время как встраиваемая структура или объединение включает в себя имена данных, структур и имена элементов.
Приведем синтаксис режима Ideal:
STRUC имя_структуры параметры_заполнения
В режиме MASM вы можете использовать следующий синтаксис:
имя_структуры STRUC параметры_заполнение
Оператор такого вида можно использовать только внутри структуры или объединения. Здесь "имя_структуры" - это имя ранее определенной структуры или объединения, которая должны включаться. "Параметры_заполнения" задают изменения, которые вы хотите внести в начальные (используемые по умолчанию) значения включенных элементов структуры. Ключевое слово ? указывает, что все встраиваемые элементы структуры нужно рассматривать, как неинициализированные. В противном случае поле "параметры_заполнения" имеет следующий синтаксис:
{ [имя_элемента [=выражение] [,имя_элемента [=выражение].]] }
где "имя_элемента" - это имя любого элемента включаемой структуры, начальное значение которого при включении требуется изменить. "Выражение" представляет собой значение, на которое вы хотите его изменить. При наличии "выражения" начальное значение этого элемента структуры при его включении останется без изменения. Если вы задаете в поле выражения ключевое слово ?, то начальное значение элемента будет записываться при его включении, как неинициализированное.
Поскольку в режиме MASM имена элементов структуры являются глобальными, при копировании структуры они не переопределяются. Таким образом, в режиме MASM включение одной структуры в другую более полезно, когда вы делаете это в начале определяемой структуры или объединения.
Обычно, когда вы создаете экземпляр структуры, нужно обеспечить, что инициализированные данные содержал только один элемент объединения (подробности см. здесь). Поскольку при встраивании структуры создание экземпляра не предусматривается, это ограничение здесь не применяется. Инициализированные данные могут содержать несколько элементов включаемого объединения, например:
FOO STRUC ABC DW 1 DEF DW 2 UNION A1 DW "123" A2 DW ? ENDS ENDS
FOO2 STRUC FOO STRUC {A1=2} ; встроить структуру FOO в структуру FOO2 с переопределением заметим, ; что по умолчанию в FOO2 инициализируется и A1, и A2 GHI DB 3 ENDS
Определение структуры FOO2 в предыдущем примере эквивалентно следующей вложенной структуре/объединению:
FOO STRUC STRUC ; начало вложенной структуры. ABC DW 1 DEF DW 2 UNION ; начало вложенного объединения. A1 DW "123" A2 DW ? ENDS ; конец вложенного объединения. ENDS ; конец вложенной структуры. GHI DB 3 ENDS
Заметим, что при создании экземпляра FOO2 нужно убедиться, что инициализируется только одно значение в объединении.
Использование имен структур в выражениях
После того, как вы определите структуру или объединение, информацию о структуре и объединении можно получить различными путями. Для получения информации с помощью выражений Турбо Ассемблера вы можете использовать имена типа данных структуры или объединения. Более подробно об этом рассказывается в этом разделе.
1 2 3 4 5 6
8 8 8
| |