| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2348 人关注过本帖
标题:Lengthof伪指令的疑惑
只看楼主 加入收藏
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
Lengthof伪指令的疑惑
如题:Lengthof伪指令的疑惑  

我在模块1的文件定义的变量(数组),在模块2文件中 用lengthof  strMsg  返回的是1 无法返回长度
但是我在 主模块返回 28 没有任何问题。
还有我将改为 strMsg 地址传入 用pMsg 模块2 过程的形参pMsg 来接受然后改为 mov eax,lengthof pMsg 这句,也是返回1

百思不得其解,这是怎么回事啊?





这是主模块文件:

public strMsg     ;允许外部模块访问
.data
 strMsg byte "Please enter a size of stack to create: "  
.code
..........


 模块文件2:
extern strMsg:byte        ;说明为是外部模块定义的变量
.code
DisplayMsg proc pMsg:dword
           LOCAL @stdHandle:dword
           LOCAL @Reallbyte:dword
           mov eax,lengthof strMsg         这返回1,不知道怎么回事
                                           改为 mov eax,lengthof pMsg 这句也是返回1
endp DisplayMsg
搜索更多相关主题的帖子: 模块 public create 伪指令 
2012-08-22 18:42
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
这玩意就是个伪指令 当然有点限制也正常啊
2012-08-22 19:08
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 2楼 zklhp
抱歉,原来没看仔细,是在其它模块里使用字符串类外部变量的长度。这个,恐怕不行了。象 sizeof 这样的,应该是编译时就确定了的,其实际内容就是一个立即数;而对外部变量的话,则必须要等到链接时才能确认,因为编译只是针对当前模块的;而且,链接时的对外部变量的相关信息,往往也只是地址的修正上。
所以,楼主你这样的要求,恐怕只能折中了。要么通过求字符串长度函数来得到其长度;要么再增设一个字符串长度的变量,在定义该字符串的模块里设置其内容,并 public 之;在其它模块里定义其为外部引用并使用它。


我终于明白了   我忽略了编译的问题。  是因为外部模块要需要独立编译的(MASM32手工编译),所以你在编译这个(模块2文件)引用外部变量的时,sizeof或lengthof是无法得知该全局变量的初始化造成的,因为他们是伪指令,要编译时候要确定其值,所以主模块中被引用的全局变量还没被编译,所以模块2引用他的时候编译时,这个全局变量的值是无法得知的(长度)。
2012-09-06 22:41
快速回复:Lengthof伪指令的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018272 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved