免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3949 | 回复: 7
打印 上一主题 下一主题

**函数调用为啥不保存所有的寄存器???** [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-10 16:25 |只看该作者 |倒序浏览
难道不怕被‘被调用函数’修改吗?

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
2 [报告]
发表于 2010-04-10 16:28 |只看该作者
如果约定好哪些寄存器不需要保存,并且代码遵从这种约定,就可以了。

论坛徽章:
0
3 [报告]
发表于 2010-04-10 16:29 |只看该作者
瞎墨迹啥?MIPS有几个寄存器是专门保存参数的,x64那么多寄存器,一般函数也就两三个参数,一定要入栈么?

论坛徽章:
0
4 [报告]
发表于 2010-04-10 16:37 |只看该作者
我个人觉得**一般情况下**,所有用到的数据(全局,局部...),都在内存中,所以不需要保护所有寄存器。
但是优化情况下,比如说将中间变量放在寄存器中,估计就要将此寄存器pop到栈中保护起来了。
望大虾指点这种理解是否正确?谢谢!!!

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
5 [报告]
发表于 2010-04-10 16:52 |只看该作者
函数调用,会使程序执行从当前帧(frame)进入到新的帧,需要保存相关的寄存器,以确保在返回到先前的帧时,相关寄存器的内部不会被破坏(clobber)。

论坛徽章:
0
6 [报告]
发表于 2010-04-10 17:00 |只看该作者
楼上的大虾,但是我只看见函数调用时只是把‘实参,EBP,局部变量’入栈,并没有把其他的寄存器入栈,这矛盾吗?

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
7 [报告]
发表于 2010-04-10 17:15 |只看该作者
没看过x86汇编

论坛徽章:
0
8 [报告]
发表于 2010-04-10 23:15 |只看该作者
EricFisher解答正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP