汇编语言声明结构变量

结构变量可以被声明,并能选择为是否用特定值进行初始化。语法如下,其中 structureType 已经用 STRUCT 伪指令定义过了:

identifier structureType <initializer-list>

identifier 的命名规则与 MASM 中其他变量的规则相同。initializer-list 为可选项,但是如果选择使用,则该项就是一个用逗号分隔的汇编时常数列表,需要与特定结构字段的数据类型相匹配:

initializer [, initializer] ...

空括号 <> 使结构包含的是结构定义的默认字段值。此外,还可以在选定字段中插入新值。结构字段中的插入值顺序为从左到右,与结构声明中字段的顺序一致。这两种方法的示例如下,使用的结构是 COORD 和 Employee:
.data
point1 COORD <5,10>             ; X = 5, Y = 10
point2 COORD <20>               ; X = 20, Y = ?
point3 COORD <>                 ; X = ?, Y = ?
worker Employee <>              ; 默认初始值
可以只覆盖选定字段的初始值。下面的声明只覆盖了 Employee 结构的 IdNum 字段,而其他字段仍为默认值:

person1 Employee <"555223333">

还有一种形式是使用大括号 {…} 而不是尖括号:

person2 Employee {"555223333"}

若字符串字段初始值的长度少于字段的定义,则多出的位置用空格填充。空字节不会自动插到字符串字段的尾部。通过插入逗号作为位置标记可以跳过结构字段。例如,下面的语句就跳过了 IdNum 字段,初始化了 LastName 字段:

person3 Employee <, "dJones">

数组字段使用 DUP 运算符来初始化某些或全部数组元素。如果初始值比字段位数少,则多出的位置用零填充。下面的语句只初始化了前两个 SalaryHistory 的值,而其他的值则为 0:

person4 Employee <, , ,2 DUP(20000)>

DUP 运算符能够用于定义结构数组,如下所示,AllPoints 中每个元素的 X 和 Y 字段都被初始化为 0:

NumPoints = 3
AllPoints COORD NumPoints DUP(<0,0>)

对齐结构变量

为了最好的处理器性能,结构变量在内存中的位置要与其最大结构成员的边界对齐。Employee 结构包含双字 (DWORD) 字段,因此,下面的定义使用了双字对齐:

.data
ALIGN DWORD
person Employee <>