万恶的ADDR 指令把我郁闷到了...

bingying19872008 2009-11-05 06:24:05
今天写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后再调用....
郁闷啊.....
发发牢骚....

...全文
99 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧