今天写1个小程序练手.有1过程
Swap PROC USES eax esi edi
然后 mov eax,3
INVOKE Swap,ADDR [Array+esi], ADDR [Array+esi+4]
原本以为因为使用了USES eax的 所以执行完INVOKE 后 eax 仍然为3....结果发现eax的值被改了.....郁闷了.
反汇编看.....
发现ADDR 执行2次操作......
lea eax,Array+4
push eax //假设eax此时为5
lea eax,Array
push eax //4
然后又接着因为使用了USES eax
又 push eax //4
一共push 了3次
最后的
ret 指令
pop eax 1次(因为用了USES)
接着就 ret 8(因为2次ADDR)
现在好了 eax 的值就被改成了4.....郁闷啊
你说你ADDR 要是 先push 在lea 多好...
现在我每次使用 USES eax,INVOKE ADDR 这3个指令的时候在调用eax 前都习惯保存下eax,在INVOKE后再调用....
郁闷啊.....
发发牢骚....