首页
社区
课程
招聘
[求助]请教汇编语言定义全局变量的初始化问题
2006-7-3 11:09 10690

[求助]请教汇编语言定义全局变量的初始化问题

2006-7-3 11:09
10690
我这样定义了一个全局变量
bDat db 1024 dup(0CEh,051h,0B5h,03Ah,074h,000h,0BCh,0A3h,0E2h,030h,0BBh,0D4h,041h,0A5h,0DFh,04Ah,0D7h,095h,0D8h,03Dh,06Dh,0C4h,0D1h,0A4h,0FBh,0F4h,0D6h,0D3h,06Ah,0E9h,069h,043h,0FCh,0D9h,06Eh,034h,046h,088h,067h,0ADh,0D0h,0B8h,060h,0DAh,073h,02Dh)
括号里面放46个数时可能编译通过,但再加一个就出问题,提示如下:statement too complex
这是为什么??

谢谢大家!!

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

收藏
点赞7
打赏
分享
最新回复 (8)
雪    币: 766
活跃值: (415)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
FishSeeWater 11 2006-7-3 15:56
2
0
大家不会都不会吧??
11个人参观过啊!
可能这个题对大家来说很简单,可对我来说真不知道什么原因,会的大哥们能帮解释一下吗?我搞了一天了:(

谢谢谢谢!!!!!
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2006-7-3 18:25
3
0
你这样初始化变量不出问题才怪。
1024*46=47104的数据,早就超出你定义的数据缓冲大小。
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2006-7-3 18:28
4
0
应该这样初始化全局变量。
bDat db 0CEh,051h,0B5h,03Ah,074h,000h,0BCh,0A3h,
     db 0E2h,030h,0BBh,0D4h,041h,0A5h,0DFh,04Ah,
     db 0D7h,095h,0D8h,03Dh,06Dh,0C4h,0D1h,0A4h,
     db 0FBh,0F4h,0D6h,0D3h,06Ah,0E9h,069h,043h,
     db 0FCh,0D9h,06Eh,034h,046h,088h,067h,0ADh,
     db 0D0h,0B8h,060h,0DAh,073h,02Dh
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
samstones 2006-7-3 20:14
5
0
要看是什么编译器了,不同编译器的数据块上限不同
雪    币: 766
活跃值: (415)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
FishSeeWater 11 2006-7-3 22:19
6
0
To 小虾版主:
首先谢谢您,
1024*46=47104这怎么理解?
“定义1024个db空间,用括号中的数据来循环填充”这样理解不对吗?

每行8个数的依据是什么?这些知识哪本书上讲的好?(知道书了自己学,不好意思老是问)。如果我要初始化2048个数,难不成要db 2048/8 次?

To samstones :
谢谢您,我用的是masm328 IDE是AOGO新出的MasmPlus,大家可以去试试,挺好用的:)

再次谢谢大家!
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2006-7-3 22:41
7
0
1024*46=47104的意思是说你定义了1024的db空间,但你用dup(0,1,2,...)循环连续填充"1024次"的"46个"数据=47104个数据,这个数据已经大于你定义的1024的db空间了。溢出了,所以MASM提示你数据大太大复杂了。每行8个数的依据是各人爱好习惯,你也可以定义9个数、10个数,11个数,不过一行最好不要太长,不然超过了256个数估计MASM又会出问题。
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaofeng 2006-7-3 23:27
8
0
dup(?) 里面是否可以写多个数字的, 好像不可以把, 再说楼上的解释本身有矛盾之处, 如果是语法本身说明1024 次重复后面的内容, 则本身何来1024 长度限制的意思.
  应该是如果定义一个buffer 就按楼上前面给出的方法来写这一个方法
雪    币: 513
活跃值: (2228)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
loveboom 53 2006-7-4 12:57
9
0
没有搞清楚你想干什么,你是想定义个变量,
1.
var1  db 0xxx,xxxx(长度1024)

还是想定义变量为
2.
var2  db 1024 dup (0xxxx[长度1024])

如果是第2种情况,那么建议你做一次
var3  db 0xxxx(长度1024)
然后在内存中copy memory
游客
登录 | 注册 方可回帖
返回