x87648510 发表于 2013-8-18 20:05:59

怎么判断寄存器用来传递参数给子程序??

一般 都是用push的 但是有时候是用寄存器传递参数的,这个时候该怎么判断很是纠结请高手指点迷津

属専色灰 发表于 2013-8-18 21:00:46

本帖最后由 属専色灰 于 2013-8-18 21:04 编辑

楼主不会是准备搞挂吧!
去call里面看,用到了谁就传谁,不可依赖返回值大小来判断call的参数~这是修炼内功,多多练习就好了~~~
寄存器是有限的,参数多的话没办法全部用寄存器传的...

岚澈清 发表于 2013-8-18 21:16:06

汇编吧,刚开始学:lol:

x87648510 发表于 2013-8-19 16:11:46

属専色灰 发表于 2013-8-18 21:00 static/image/common/back.gif
楼主不会是准备搞挂吧!
去call里面看,用到了谁就传谁,不可依赖返回值大小来判断call的参数~这是修炼内功 ...

:lol:   用到寄存器做参数传递的时候 感觉很难判断啊要看到内部直接用到哪个纠结

liangfei44 发表于 2013-9-3 22:22:00

那你这个就要前后文看了,一般寄存器传寄参数,都需要先在栈里取出参数才能传递,一般局部变量存在,参数一般存在,应该这样可以看出一点点。

小名明SIU 发表于 2013-9-3 22:51:25

这个不一定,要根据源码来判断,要是debug版的基本上都是push(debug版下的__fastcall用到了寄存器,当然也可能有push),但是release版的就是寄存器和push相结合了,参数不多的话直接用寄存器传递,要是多的话就是寄存器和push一起用,毕竟取数据寄存器比内存(栈用的也是是内存)快多了。

小名明SIU 发表于 2013-9-3 22:52:11

看反汇编代码就一目了然了

liangfei44 发表于 2013-9-3 22:56:32

那这样就麻烦了哦,每个编译器的编译都不同哦,因为优化代码的计算方法本来就存在区别!那就得看经验了!有的用时间换空间的,有的用空间换时间。
页: [1]
查看完整版本: 怎么判断寄存器用来传递参数给子程序??