变量的使用

变量的使用:
1.以不同的类型访问变量:
先定义一个缓冲区:
szBuffer    db    
1024 dup (?)
如果mov ax,szBuffer 就会报错,因为szBuffer是用db定义的,而ax是word,尺寸不合,解决办法用ptr
    
mov ax,word ptr szBuffer
    
mov eax,dword ptr szBuffer
这样就可以。

想要强制类型转换,就可以用MOVZX或MOVSX。前者不带符号,后者带符号。
如: 
movzx ax,bTest1    ;把单字节变量bTest1的值扩展到16位放入ax中。
     movzx eax,bTest1    ;把单字节变量bTest1的值扩展到32位放入eax中。
     

2.变量的尺寸和数量:
sizeof获取变量,数据类型或数据结构以字节为单位的长度,lengthof获取变量中数据的项数。
如:定义了以下数据
stWndClass        WNDCLASS <>
szHello            db        
'Hello,world!',0
dwTest            db        
1,2,3,4

mov eax,sizeof stWndClass    ;eax是40,stWndClass结构的长度
mov ebx,sizeof WNDCLASS        ;ebx是40,WNDCLASS结构的长度
mov ecx,sizeof szHello        ;ecx是13,'Hello,world!'字符串长度加上一个字节的0结束符
mov edx,sizeof dword        ;edx是4,双字的长度
mov esi,sizeof dwTest        ;esi是16,4个双字的长度

要注意的是,sizeof 和 lengthof 的数值是编译时候产生的,所以最后产生的代码是:
mov eax,40
mov ebx,40
mov ecx,13
mov edx,4
mov esi,16

3.获取变量地址
取全局变量:如: 
mov eax, offset WndClass
取局部变量:用ebp来做指针操作。
如果要在invoke伪指令的参数中用到一个局部变量的地址,就用addr

posted @ 2009-04-02 16:23  小试锋芒  阅读(103)  评论(0编辑  收藏  举报