免费注册 查看新帖 |

Chinaunix

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

mips中返回地址寄存器的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-08 14:09 |只看该作者 |倒序浏览
看《see mips run》中有这么一段话
$31为返回地址寄存器。
与返回地址保存在堆栈中相比,保存到$31中显得不是很灵活。但是有一些好出。
首先,它可以使分支指令和内存访问指令保持很好的独立性;
其次,当调用那些根本就不需把返回地址保存在堆栈中的小程序时,它可以提高程序效率。

这两个好处谁能帮忙解释一下,谢谢

论坛徽章:
0
2 [报告]
发表于 2009-12-17 18:03 |只看该作者
其次,当调用那些根本就不需把返回地址保存在堆栈中的小程序时,它可以提高程序效率。

直接在从$31拿返回地址当然更快,因为不需要访问总线和内存。

论坛徽章:
0
3 [报告]
发表于 2009-12-17 18:05 |只看该作者
arm、powerpc也都有这样一个寄存器,可以说这是RISC的一个特性吧

论坛徽章:
0
4 [报告]
发表于 2009-12-17 22:12 |只看该作者
“其次”被2楼解释了;
“首先”是因为分支目标在寄存器里就不需要访存了。

论坛徽章:
0
5 [报告]
发表于 2009-12-18 16:34 |只看该作者

回复 #1 libra811 的帖子

这样理解第一点:
RISC 的一个原则就是只用 ld 和 st 两条指令访问内存,从而简化硬件设计。如果我们将返回地址放在堆栈中,那么函数调用 jal 和返回 jr 就都得访问内存,这就与 RISC 的原则相违背了。

这样理解第二点:
“小函数”是个不准确的翻译,原意应当是“叶函数”,也就是不调用其他函数的函数。因为这样的函数不调用其他函数,也就没有必要保存 $31,从而比把返回地址放在堆栈中的方法减少了两次内存访问。

事实上第二点中的条件不是必要的。将返回地址放在寄存器里总是能减少内存访问的,不管是不是在叶函数中。

论坛徽章:
0
6 [报告]
发表于 2010-01-15 11:03 |只看该作者
多谢各位的回复!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP