使用MASM11(变量的使用2)- Win32汇编语言019
2011-10-27 02:06
453 查看
使用MASM11(变量的使用2)
让编程改变世界Change the world by program
变量的尺寸和数量
在源程序中用到变量的尺寸和数量的时候,可以用sizeof和lengthof伪指令来实现,格式是:sizeof 变量名、数据类型或数据结构名
lengthof 变量名
他们的区别是:sizeof 伪指令可以取得变量、数据类型或数据结构以字节为单位的长度,然而 lengthof 则可以取得变量中数据的项数。
[codesyntax lang="asm"]
stWndClass WNDCLASS <> szHello db ‘Hello,world!’,0 dwTest dd 1,2,3,4 …… .code …… mov eax, sizeof stWndClass mov ebx, sizeof WNDCLASS mov ecx, sizeof szHello mov edx, sizeof dword mov esi, sizeof dwTest
[/codesyntax]
执行后 eax 的值是 stWndClass 结构的长度:40
ebx同样是:40
ecx的值是Hello,world! 字符串的长度加上一个字节的0结束符:13
edx的值是一个双字的长度:4
esi等于4个双字的长度:16
如果把所有的 sizeof 换成 lengthof,那么eax会等于1,因为只定义了1项WNDCLASS
而ecx同样等于13
esi则等于4
lenghof WNDCLASST 和 lengthof dword 是非法的用法,编译程序会报错。
要注意的是,sizeof 和lengthof 的数值是编译时产生的,由编译器传递到指令中去,上边的指令最后产生的代码就是:
mov eax, 40
mov ebx, 40
mov ecx, 13
mov edx, 4
mov esi, 16
如果为了把Hello和World分两行定义,szHello是这样定义的:
szHello db ‘Hello’, odh, oah
db ‘World’, 0
那么 sizeof szHello 是多少呢?
注意!是7,而不是13。MASM 中的变量定义只认一行,后一行db ‘World’, 0 实际上是另一个没有名称的数据定义,编译器认为sizeof szHello是第一行字符的数量。(尝试一下)
虽然把 szHello 的地址当参数传给 MessageBox 等函数显示时会把两行都显示出来,但严格地说这是越界使用变量。
虽然在实际的应用中这样定义长字符串的用法很普遍,因为如果要显示一屏幕帮助,一行是不够的。
但要注意的是:要用到这种字符串的长度时,千万不要用 sizeof 去表示,最好是在程序中用lstrlen 函数去计算。
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://urlxf.qq.com/?NniEBvm']视频下载[/Downlink]
相关文章推荐
- 使用MASM11(变量的使用2)- Win32汇编语言019
- 使用MASM06 - Win32汇编语言014
- WIN32汇编语言中位图的使用
- 使用MASM02 - Win32汇编语言010
- 使用MASM02 - Win32汇编语言010
- 罗云彬win32汇编教程笔记 变量的使用
- 使用MASM03 - Win32汇编语言011
- 使用MASM04 - Win32汇编语言012
- 使用MASM05 - Win32汇编语言013
- 使用MASM03 - Win32汇编语言011
- 使用MASM04 - Win32汇编语言012
- 使用MASM05 - Win32汇编语言013
- 使用MASM07 - Win32汇编语言015
- 使用MASM07 - Win32汇编语言015
- 使用MASM12(使用子程序和堆栈平衡原理)- Win32汇编语言020
- WIN32汇编语言中位图的使用
- 使用MASM12(使用子程序和堆栈平衡原理)- Win32汇编语言020
- 使用vs2010和masm32搭建win32汇编语言编程编译环境
- [编程实例]win32汇编语言调用dll结束进程[使用masmplus1.2]
- WIN32汇编语言之通用对话框的使用