在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 都是内存操作数。