zoukankan      html  css  js  c++  java
  • 使用MASM11(变量的使用2) Win32汇编语言019

    使用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]
  • 相关阅读:
    MD5 SHA1 CRC32
    tf 常用函数 28原则
    matplotlib 28原则
    markdown 基本语法
    tf 数据读取
    django 自定义身份认证
    代理部署
    社区发现算法问题&&NetworkX&&Gephi
    机器学习中的数学——拉格朗日乘子法
    过拟合(Overfitting)和正规化(Regularization)
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847138.html
Copyright © 2011-2022 走看看