当前位置: 代码迷 >> 汇编语言 >> 问个WNDCLASSEX初始化的有关问题
  详细解决方案

问个WNDCLASSEX初始化的有关问题

热度:5746   发布时间:2013-02-26 00:00:00.0
问个WNDCLASSEX初始化的问题
在windows环境下32位汇编语言程序设计里看见的.
下面代码初始化@stWndClass.hInstance为什么用push,pop这两个语句呢?
使用mov操作可以么?

push hInstance
pop @stWndClass.hInstance

_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG

invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
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
invoke RegisterClassEx,addr @stWndClass

------解决方案--------------------------------------------------------
因为MOV指令中两个操作数不能同时为内存操作数,如果用MOV的话要用先将源操作数移入一个寄存器,再将寄存器移入到目的操作数.这样就多了一行代码,而用PUSH和POP则不存在这样的限制.

初学不对之处请原谅!!!!


------解决方案--------------------------------------------------------
用 mov 不符合语法。
因为 hInstance 和 @stWndClass.hInstance 都是内存操作数。
  相关解决方案