0988b24c

Определение таблиц


Табличный тип данных представляет набор элементов таблицы. Каждый элемент имеет заданный размер (в байтах) и начальное зна- чение. Элемент таблицы может быть виртуальным или статическим. Виртуальному элементу таблицы присваивается смещение в табличном типе данных. Для него резервируется место в каждом экземпляре таблицы. Статических элемент не имеет смещения. В экземпляре таб- лицы пространство для него не резервируется.

В целом размер табличного типа данных равен сумме размеров всех виртуальных элементов.

Табличные типы данных представляют таблицы методов, исполь- зуемые в объектно-ориентированном программировании. С объектом связано обычно некоторое число методов, которые являются указате- лями на процедуры, работающие с экземплярами объектов. Процедуры методов могут либо вызываться непосредственно (статические мето- ды), либо косвенно, через таблицу указателей процедур методов (виртуальные методы).

Для описания табличного типа данных в режиме Ideal можно использовать следующий синтаксис:

TABLE имя [элемент_таблицы [,элемент_таблицы.]]

Следующий синтаксис работает только в режиме MASM:

имя TABLE [элемент_таблицы [,элемент_таблицы.]]

Каждое поле "элемент_таблицы" имеет следующий синтаксис:

имя_таблицы

или [VIRTUAL] имя_элемента [[выражение_счетчика_1]] [: сложный_тип [:выражение_счетчика_2]] [=выражение]

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

"Имя_элемента" - это имя элемента таблицы. Необязательное ключевое слово VIRTUAL указывает, что элемент является виртуаль- ным, и ему нужно присвоить смещение.

"Сложный_тип" может представлять собой любое допустимое вы- ражение сложного типа. Описание допустимых типов выражений можно найти в Главе 5.

Если вы не задается поле "сложный_тип", Турбо Ассемблер под- разумевает, что это WORD (или DWORD, если текущей выбранной мо- делью является 32-разрядная модель).


Поле "выражение_счетчик_2" задает, сколько элементов данного типа определяется в таблице. Определение элемента таблицы:

foo TABLE VIRTUAL tmp:DWORD:4

определяет элемент таблицы с именем tmp, состоящий из 4 двойных слов.

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

В режиме Ideal имена элементов таблицы являются локальными для таблицы, а в режиме MASM имеют глобальную область действия.

Поле "имя" задает имя табличного типа данных. Позднее вы мо- жете использовать его в модуле для получения информации о таблич- ном типе данных. Для получения информации можно также использо- вать имена отдельных элементов. Подробнее об этом рассказывается в Главе 5.

Табличные типы данных являются переопределяемыми. В модуле вы можете несколько раз определить табличный тип данных с одним и тем же именем. Подробнее об этом рассказывается в Главе 12.

Кроме того, Турбо Ассемблер обеспечивает соответствующий синтаксис для определений табличного типа данных, в которых ис- пользуется несколько строк.

Этот синтаксис аналогичен синтаксису перечислимого типа дан- ных. Приведем пример:



foo TABLE t1:WORD,t2:WORD,t3:WORD,t4:WORD ; исходная версия

foo TABLE { ; версия, использующая t1:WORD, ; несколько строк

t2:WORD, t3:WORD, t4:WORD }

foo TABLE t1:WORD,t2:WORD, { ; более компактная версия t3:WORD,t4:WORD }


Содержание раздела