adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
структуры или объединения.
В структуре каждый элемент данных начинается, когда заканчи-
вается предыдущий элемент. В объединении каждый элемент данных
начинается с того же смещения, что и предыдущий элемент данных.
Если отдельный элемент данных может целиком включать в себя
структуру или объединение, это дает существенную гибкость и отк-
рывает большие возможности. Описание директив STRUC, UNION и ENDS
можно найти в следующей таблице:
Турбо Ассемблер 3.0/tasm/#1-2 = 159 =
Директивы STRUC, UNION и ENDS Таблица 8.1
ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Директива і Смысл і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і STRUC і При использовании внутри открытой структуры і
і і или объединения данная директива начинает і
і і блок элементов, который внешняя (охватываю- і
і і щая) структура или объединение рассматрива- і
і і ет, как один элемент. Смещения элементам в і
і і блоке присваиваются в возрастающем порядке. і
і і Размер блока представляет собой сумму разме- і
і і ров всех элементов в нем. і
і і і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і UNION і При использовании внутри открытой структуры і
і і или объединения данная директива начинает і
і і блок элементов, который охватывающая струк- і
і і тура или объединение рассматривает как один і
і і элемент. Элементам блока присваивается одно і
і і и то же смещение. Размер блока равен размеру і
і і наибольшего элемента в нем. і
і і і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ENDS і Завершает блок элементов, начинающихся пре- і
і і дыдущей директивой STRUC или UNION. і
і і і
АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Например, в следующем определении данных типа структуры/объ-
единения содержится в общей сложности 5 элементов.
CUNION STRUC
CTYPE DB ?
UNION ; начало объединения
; если CTYPE = 0, использовать следующее...
STRUC
CT0PAR1 DW 1
CT0PAR2 DW 1
ENDS
; если CTYPE = 1, использовать следующее...
STRUC
CT1PAR1 DW 3
CT1PAR2 DW 4
ENDS
ENDS ; конец объединения
ENDS ; конец структурного типа
Список этих элементов приведен в следующей таблице:
Турбо Ассемблер 3.0/tasm/#1-2 = 160 =
Элементы блока Таблица 8.1
ЪДДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іЭлемент і Тип і Смещение і Значение по умолчанию і
ГДДДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і CTYPE і Byte і 0 і ? (не инициализирован) і
і CT0PAR1 і Word і 1 і 1 і
і CT0PAR2 і Byte і 3 і 2 і
і CT1PAR1 і Byte і 1 і 3 і
і CT1PAR2 і Dword і 2 і 4 і
АДДДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Длина данной структуры/объединения равна 6 байтам.
Включение одной именованной структуры в другую
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Чтобы способствовать наследованию объектов, Турбо Ассемблер
обеспечивает способ, при котором весь тип данных структуры или
объединения, включая имена элементов, встраивается в открытое оп-
ределение структуры. Он интерпретирует встроенную структуру или
объединение, как если бы они были вложены в этой точке внутри от-
крытого определения структуры или объединения. Таким образом,
встраивание одной структуры или объединения в другую принципиаль-
но отличается от включения в структуру или объединение экземпляра
другой структуры или объединения: экземпляр включает в себя толь-
ко инициализированные или неинициализированные данные, в то время
как встраиваемая структура или объединение включает в себя имена
данных, структур и имена элементов.
Приведем синтаксис режима Ideal:
STRUC имя_структуры параметры_заполнения
В режиме MASM вы можете использовать следующий синтаксис:
имя_структуры STRUC параметры_заполнение
Оператор такого вида можно использовать только внутри струк-
туры или объединения. Здесь "имя_структуры" - это имя ранее опре-
деленной структуры или объединения, которая должны включаться.
"Параметры_заполнения" задают изменения, которые вы хотите внести
в начальные (используемые по умолчанию) значения включенных эле-
ментов структуры. Ключевое слово ? указывает, что все встраивае-
мые элементы структуры нужно рассматривать, как неинициализиро-
ванные. В противном случае поле "параметры_заполнения" имеет
следующий синтаксис:
{ [имя_элемента [=выражение] [,имя_элемента [=выражение]...]] }
где "имя_элемента" - это имя любого элемента включаемой структу-
ры, начальное значение которого при включении требуется изменить.
"Выражение" представляет собой значение, на которое вы хотите его
изменить. При наличии "выражения" начальное значение этого эле-
Турбо Ассемблер 3.0/tasm/#1-2 = 161 =
мента структуры при его включении останется без изменения. Если
вы задаете в поле выражения ключевое слово ?, то начальное значе-
ние элемента будет записываться при его включении, как неинициа-
лизированное.
Поскольку в режиме MASM имена элементов структуры являются
глобальными, при копировании структуры они не переопределяются.
Таким образом, в режиме MASM включение одной структуры в другую
более полезно, когда вы делаете это в начале определяемой струк-
туры или объединения.
Обычно, когда вы создаете экземпляр структуры, нужно обеспе-
чить, что инициализированные данные содержал только один элемент
объединения (подробности см. в Главе 12). Поскольку при встраива-
нии структуры создание экземпляра не предусматривается, это огра-
ничение здесь не применяется. Инициализированные данные могут со-
держать несколько элементов включаемого объединения, например:
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 нужно убедиться,
что инициализируется только одно значение в объединении.
Турбо Ассемблер 3.0/tasm/#1-2 = 162 =
Использование имен структур в выражениях
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
После того, как вы определите структуру или объединение, ин-
формацию о структуре и объединении можно получить различными пу-
тями. Для получения информации с помощью выражений Турбо Ассемб-
лера вы можете использовать имена типа данных структуры или объ-
единения. Более подробно об этом рассказывается в Главе 5.
Определение таблиц
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Табличный тип данных представляет набор элементов таблицы.
Каждый элемент имеет заданный размер (в байтах) и начальное зна-
чение. Элемент таблицы может быть виртуальным или статическим.
Виртуальному элементу таблицы присваивается смещение в табличном
типе данных. Для него резервируется место в каждом экземпляре
таблицы. Статических элемент не имеет смещения. В экземпляре таб-
лицы пространство для него не резервируется.
В целом размер табличного типа данных равен сумме размеров
|
adfun.ru
|
|
|
|