鱼C论坛

 找回密码
 立即注册
查看: 3903|回复: 7

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

[复制链接]
发表于 2013-8-18 20:05:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一般 都是用push的 但是有时候是用寄存器传递参数的,这个时候该怎么判断  很是纠结  请高手指点迷津
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 21:00:46 | 显示全部楼层
本帖最后由 属専色灰 于 2013-8-18 21:04 编辑

楼主不会是准备搞挂吧!
去call里面看,用到了谁就传谁,不可依赖返回值大小来判断call的参数~这是修炼内功,多多练习就好了~~~
寄存器是有限的,参数多的话没办法全部用寄存器传的...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-18 21:16:06 | 显示全部楼层
汇编吧,刚开始学:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-19 16:11:46 | 显示全部楼层

:lol:   用到寄存器做参数传递的时候 感觉很难判断啊  要看到内部直接用到哪个  纠结
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-3 22:22:00 | 显示全部楼层
那你这个就要前后文看了,一般寄存器传寄参数,都需要先在栈里取出参数才能传递,一般局部变量存在[ebp-?],参数一般存在[ebp+?],应该这样可以看出一点点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-3 22:51:25 | 显示全部楼层
这个不一定,要根据源码来判断,要是debug版的基本上都是push(debug版下的__fastcall用到了寄存器,当然也可能有push),但是release版的就是寄存器和push相结合了,参数不多的话直接用寄存器传递,要是多的话就是寄存器和push一起用,毕竟取数据寄存器比内存(栈用的也是是内存)快多了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-3 22:52:11 | 显示全部楼层
看反汇编代码就一目了然了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-3 22:56:32 | 显示全部楼层
那这样就麻烦了哦,每个编译器的编译都不同哦,因为优化代码的计算方法本来就存在区别!那就得看经验了!有的用时间换空间的,有的用空间换时间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表