如题: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
------解决方案--------------------------------------------------------
抱歉,原来没看仔细,是在其它模块里使用字符串类外部变量的长度。这个,恐怕不行了。象 sizeof 这样的,应该是编译时就确定了的,其实际内容就是一个立即数;而对外部变量的话,则必须要等到链接时才能确认,因为编译只是针对当前模块的;而且,链接时的对外部变量的相关信息,往往也只是地址的修正上。
所以,楼主你这样的要求,恐怕只能折中了。要么通过求字符串长度函数来得到其长度;要么再增设一个字符串长度的变量,在定义该字符串的模块里设置其内容,并 public 之;在其它模块里定义其为外部引用并使用它。
------解决方案--------------------------------------------------------
言之有理,应该是这个问题。