读书人

问个WNDCLASSEX初始化的有关问题

发布时间: 2012-02-10 21:27:41 作者: rapoo

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

读书人网 >汇编语言

热点推荐