汇编语言中一样拥有和高级语言类似的ADT,MASM允许将若干个相关的变量作为一个数据元素来进行整体的数据定义,然后通过相应的结构预置语句为变量分配空间。MASM有结构、联合和记录等复杂数据结构的定义伪指令。
结构Struct
类似于C的结构,MASM的结构允许把不同类型的数据组织到一个数据结构中,便于处理某些变量。其定义基本格式如下:
student struct ;student是结构名
id dw ?
name db 'Tom'
math db 0
english db 0
student ends
结构中可以有任意数目的字段,且各个字段长度可以不同,可以有名或无名,可以有初值或者无初值。结构的空间大小为内部所有字段空间大小的总和。
在声明一个结构变量时,需要听变量初值表来提示程序分配内存。其基本格式如下:
stu1 student<1,'Mary',85,90> ;<>内的是初值表,按顺序排列。
注意,在结构说明中使用DUP操作符说明的字段不能再结构预置语句中初始化。
获取结构内字段的方法和高级语言一样使用.操作符。
使用DUP定义结构数组的基本结构如下:
array name 100 dup(<>) ;分配100个空白结构
记录Record
记录类似于高级语言(C++)中的bitset,可以直接按名访问字或者字节中的若干位的方法。记录中的基本存储单位是二进制位其定义的基本格式如下:
;name record bit = set
person record year:4,sex:1=0,marriage:1=1
记录长度低于8字节时,占用一个字节,先计算占用位数,再从高位到地位分配。例如:year将会占用D2-D5,sex占用D1,marriage占用D0。
记录变量的初始化一样使用初值表:
zhang person <1000b,1,1,0>
记录变量在直接传输时,表示这个记录使用的字节的值。当传输位段名时,表示该位段距离最低位的距离。当使用WIDTH伪指令时,返回该记录/记录位段所占的位数。例如,传输sex返回1,传输width person返回6,传输width year返回4。当使用mask伪指令+位段名时,返回一个8位或者16位值,其中被位段名占有的位为1,其余位为0.
联合Union
和高级语言(C)的联合大体相同,此处不再赘述。
另外,和高级语言一样,MASM中还提供了TYPEDEF伪指令,用于给予复杂结构另外的访问名。