首页
社区
课程
招聘
[求助]请教汇编ALIGN伪指令的问题
发表于: 2014-1-9 16:48 5805

[求助]请教汇编ALIGN伪指令的问题

2014-1-9 16:48
5805
Employee STRUCT
  Idnum BYTE "000000000"
  Lastname BYTE 30 DUP(1)
  ALIGN WORD
  Years WORD 8
  ALIGN DWORD
  SalaryHistory DWORD 1000h, 2000h, 3000h, 4000h
Employee ends

这样个结构体为何在内存中会是下面这样存储的?多了好多0啊,不是应该只占60个字节吗?

00402000 30 30 30 30 30 30 30 30 30 01 01 01 01 01 01 01 01 01  
00402012 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
00402024 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00402036 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00402048 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00
0040205a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
0040206c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
0040207e 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00

十分不解啊,那位高人给指点一二,多谢了。系统是windows2003,vc6+masm

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看一下结构体对齐吧。
2014-1-9 23:07
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看了下结构体对齐,还是没明白,貌似是用了结构体数组的问题
department Employee 5 DUP(<>)
是不是定义成数组后还有什么特殊的对齐方式?

没使用align时结构体数组中的一个元素在内存中是这样的:
00402000 30 30 30 30 30 30 30 30 30 01 01 01 01 01 01 01 01 01  000000000.........
00402012 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01  ..................
00402024 01 01 01 08 00 00 10 00 00 00 20 00 00 00 30 00 00 00  .......... ...0...
00402036 40 00

这个也并没有对齐吧,使用align之后就成这样了:
00402000 30 30 30 30 30 30 30 30 30 01 01 01 01 01 01 01 01 01  000000000.........
00402012 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01  ..................
00402024 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ..................
00402036 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ..................
00402048 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00  ..................
0040205a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ..................
0040206c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ..................
0040207e 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00

变量lastname和years之间多出了40多个字节,years和SalaryHistory之间也多处了几十个字节,这既不符合结构体对齐也不符合align对齐吧?
但是我用TYPE指令获得数组中一个元素的长度倒是60字节,是正常的,疑惑啊,
麻烦高手再指点指点
2014-1-10 09:50
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
00403000  30 30 30 30 30 30 30 30 30 01 01 01 01 01 01 01  000000000
00403010  01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01  
00403020  01 01 01 01 01 01 01 00 08 00 00 00 00 10 00 00  .......
00403030  00 20 00 00 00 30 00 00 00 40 00 00 00 00 00 00  . ...0...@......
使用align之后是这样...

不明白你的是...
2014-2-27 17:49
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我就是不明白为啥我这用了align后多了那么多0,理论上应该和你这一样才对啊
2014-3-6 10:16
0
游客
登录 | 注册 方可回帖
返回
//