сі типу, якщо ж у цьому полі при описі типу коштує знак?, То дане поле не має ніякого початкового значення (поля m змінних dt2 і dt3).
Значення за умовчанням встановлюються для тих полів, які є однаковими для кількох змінних одного типу, наприклад, рік вступу на факультет однаковий для групи студентів. Будь-яка змінна може змінювати своє значення в процесі виконання програми і тому структура може не мати як значень за замовчуванням, так і початкових значень.
Відсутність початкового значення відзначається комою. Якщо відсутні початкові значення кількох останніх полів, то коми можна не ставити. Якщо відсутній значення першого поля або полів, розташованих в середині списку полів, то коми опускати не можна. Наприклад:
4 TData <1980,,> можна замінити на dt4 TData <1980>
dt5 TData <,,> не можна замінити на dt5 TData < 5>.
Якщо відсутні всі початкові значення, опускаються всі коми, але кутові дужки зберігаються: dt6 TData < >
При описі змінних, кожна змінна описується окремою змінною, але можна описати масив структур, для цього в директиві опису змінної вказується кілька операндів і (або) конструкція повторення DUP. Наприклад: dst TData <, 4, 1>, 25 DUP (<>)
Описано масив з 26 елементів типу Data, і перший елемент (перша структура) матиме початкові значення 2000, 4, 1, а всі інші 25 в якості початкових будуть мати значення, прийняті за замовчуванням: 2000, ?, 28. Адреса першої структури визначається ім'ям dst, другий - (dst + 4), третє - (dst + 8) і т.д
Працювати з полями структури можна так само, як з полями змінної комбінованого типу в мовах високого рівня: <ім'я змінної> . < ім'я поля>
Наприклад, dt1.y, dt2.m, dt3.d
Асемблер приписує імені типу та імені змінної розмір (тип), що дорівнює кількості байтів, займаних структурою
TData=type dt1=4
І це можна використовувати при програмуванні, наприклад, так:
; виконати побайтовую пересилку dt1 в dt2
mov CX, type TData; кількість повторень в CX
mov SI, 0; i=0
m: mov AL, byte ptr dt1 [si]; побайтовая пересилання
mov byte ptr dt2 [si], AL; dt1 в dt2inc SI; i=i +1 m;
використання byte ptr обов'язково, так як
Точка, зазначена при зверненні до полю, це оператор Асемблера, який обчислює адресу за формулою:
<адресний вираз> + <Зсув поля в структурі>
Тип отриманої адреси збігається з типом поля, тобто
(dt1.m)=type m=byte
Адресний вираз може бути будь-якої складності, наприклад:
1) mov AX, (dts +8). y
2) mov SI, 8
inc (dts [SI]). m; Aісп=(dts + [SI]). M=(dts + 8). M
3) lea BX, dt1
mov [BX]. d, 10; Aісп=[BX] + d=dt1.d
Зауваження:
type (dts [SI]). m=type (dts [SI]. m)=1, але
type dts [SI]. m=type dts=4