Структура. Вложенные структуры.
Информацию о дате рождения можно оформить в виде отдельной структуры, вложенной в текущую структуру, так как это сделано в программе ниже:
:prg02_02.asm – программа, демонстрирующая вложение структуры ;в текущую структуру в программе на ассемблере. : elementstruc INN dd 0:ИНН fiodb 30 dup (' ');Ф.И.О. struc y_birthday dw 1962;год рождения m_birthday db 05;месяц рождения d_birthday db 30;месяц рождения ends nationality db 20 национальность ;и так далее ends .data si element<> .code mov al,sl.m_birthday
Синтаксис ассемблера допускает вынести описание вложенной структуры за пределы текущей структуры. При этом можно инициализировать необходимые поля структуры birthday внутри отдельного экземпляра структуры element. Но работает такое описание структуры только в режиме IDEAL, что и продемонстрировано в программе ниже.
:prg02_03.asm – программа, демонстрирующая вложение структуры в другую ; структуру в программе на ассемблере. birthday struc y_bi rthday dw 1962:год рождения m_birthday db 05:месяц рождения d_birthday db 30:день рождения ends element struc INN dd 0;ИНН Birthday struc (m_birthday-06 .d_birthday=21) fio db 30 dup С ');Ф.И.О. nationality db 20 национальность ;и так далее ends .data si element <.<>> .code ideal mov al,si.m_birthday masm
Кстати, в описание структур можно вкладывать не только описания других структур, но и описание объединений, так как это показано в следующей программе.
:prg02_04.asm – программа, демонстрирующая взаимное вложение объединений ;и структур в программе на ассемблере. elementstruc INN del 0:ИНН fiodb 30 dup С '):Ф.И.О .union struc y_birthday_1 dw 1962:год рождения m_birthday_1 db 06;месяц рождения d_birthday_1 db 03;месяц рождения ends struc d_birthday_2 db?;месяц рождения m_birthday_2 db?:месяц рождения y_birthday_2 dw?;год рождения ends ends;конец объединения nationality db 20 – . национальность:и так далее ends.data si element<> !code" mov al.si.m_bi rthday_l mov sl.m_birthday_2.0ffh mov al,sl.m_birthday_2