Иллюстрированный самоучитель по задачам и примерам Assembler

Структура. Вложенные структуры.

Информацию о дате рождения можно оформить в виде отдельной структуры, вложенной в текущую структуру, так как это сделано в программе ниже:

: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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.