+ -
当前位置:首页 → 问答吧 → WNDCLASSEX 传参疑问

WNDCLASSEX 传参疑问

时间:2011-10-20

来源:互联网

最近在学习罗云彬win32教程,注册窗口类RegisterClassEx函数的参数填写。

mov @stWndClass.hCursor,eax ;eax含有cursor的句柄
push hInstance ;hInstance含有模块句柄
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX 
;下面对@stWndClass结构中的各项赋值

我的问题是干吗不直接 mov @stWndClass.hInstance, hInstance? 我在程序中改写了这句,竟然编译不通过。
这个首先将Instance压入栈,然后将栈顶也就是刚刚hInstance弹出栈赋值到@stWndClass.hInstance,不是显得很繁琐么?

作者: wenkebilly   发布时间: 2011-10-20

mov @stWndClass.hInstance, hInstance
mov的两个操作数不能同时为存储器操作数。所以不能直接的将一个数从存储器的一个位置,复制到另个位置,因为没有从存储器到存储器的地址线,所以必须借助一个寄存器作中介,来实现将数移动到存储器的另一个位置。

作者: fuchen_1989   发布时间: 2011-10-20

@stWndClass.hInstance 和 hInstance 都是内存类型的数据,不支持 mov 指令的由内存到内存的数据操作的。所以,需要通过这样的操作方法;或者是经由通用寄存器中转。

作者: zara   发布时间: 2011-10-20

LZ 学习过 16位汇编么?
没有学习过的话,看那本有点困难的

汇编语言不支持内存到内存传值
只能这样push 再 pop

其实和
mov eax,hInstance
mov @stWndClass.hInstance,eax
是一样的

一个用栈暂存,一个用寄存器暂存
 

作者: korekara88730   发布时间: 2011-10-20