+ -
当前位置:首页 → 问答吧 → 为什么要push,pop。而不用lea或Mov

为什么要push,pop。而不用lea或Mov

时间:2011-03-31

来源:互联网

;
; 注册窗口类
;********************************************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance ;【这个push是重点】
pop @stWndClass.hInstance
;@stWndClass为一个窗口类,hInstance为这个窗口的句柄。
  ;重点是上面两条,为什么先push,在pop值。这么麻烦,而不直接用mov或Lea 直接赋值??
  ;以下的忽略
................

问题;@stWndClass为一个窗口类,hInstance为这个窗口的句柄。
  ;重点是上面两条,为什么先push,在pop值。这么麻烦,而不直接用mov或Lea 直接赋值??
 

作者: h2995527   发布时间: 2011-03-31

用mov指令也是可以的,而且指令比push、pop短一个字节,
mov edx,hInstance
mov @stWndClass.hInstance,edx
但是需要占用一个寄存器。

hInstance、@stWndClass.hInstance都是内存地址,只用lea是不能把一个地址中的内容传到另一个地址中的。

作者: DelphiGuy   发布时间: 2011-03-31

有道理,,
能用mov @stWndClass.hInstance,offset hInstance吗??

作者: h2995527   发布时间: 2011-03-31

可以,准确语法是mov dword ptr @stWndClass.hInstance,offset hInstance
不过意义和你的程序中要求的是不同的,这么mov只是把hInstance的地址,而不是它的值传送到@stWndClass.hInstance这个地址中。

作者: DelphiGuy   发布时间: 2011-03-31

感谢你,我懂了一大半,
mov eax,ebx ;mov 两个寄存器是对的
~~~
dd x,
dd y,
mov x,y;对吗,把一个值,赋给另一个值对吗。mov指令能这么用吗?

作者: h2995527   发布时间: 2011-03-31

mov 地址,地址对吗
mov 值,值 对吗

作者: h2995527   发布时间: 2011-03-31