汇编语言学习08:复杂数据结构

汇编语言中一样拥有和高级语言类似的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伪指令,用于给予复杂结构另外的访问名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值