问个WNDCLASSEX初始化的问题
在windows环境下32位汇编语言程序设计里看见的.
下面代码初始化@stWndClass.hInstance为什么用push,pop这两个语句呢?
使用mov操作可以么?
pushhInstance
pop@stWndClass.hInstance
_WinMainproc
local@stWndClass:WNDCLASSEX
local@stMsg:MSG
invokeGetModuleHandle,NULL
movhInstance,eax
invokeRtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
invokeLoadCursor,0,IDC_ARROW
mov@stWndClass.hCursor,eax
pushhInstance
pop@stWndClass.hInstance
mov@stWndClass.cbSize,sizeof WNDCLASSEX
mov@stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov@stWndClass.lpfnWndProc,offset _ProcWinMain
mov@stWndClass.hbrBackground,COLOR_WINDOW + 1
mov@stWndClass.lpszClassName,offset szClassName
invokeRegisterClassEx,addr @stWndClass
[解决办法]
因为MOV指令中两个操作数不能同时为内存操作数,如果用MOV的话要用先将源操作数移入一个寄存器,再将寄存器移入到目的操作数.这样就多了一行代码,而用PUSH和POP则不存在这样的限制.
初学不对之处请原谅!!!!
[解决办法]
用 mov 不符合语法。
因为 hInstance 和 @stWndClass.hInstance 都是内存操作数。