mips中返回地址寄存器的问题
看《see mips run》中有这么一段话
$31为返回地址寄存器。
与返回地址保存在堆栈中相比,保存到$31中显得不是很灵活。但是有一些好出。
首先,它可以使分支指令和内存访问指令保持很好的独立性;
其次,当调用那些根本就不需把返回地址保存在堆栈中的小程序时,它可以提高程序效率。
这两个好处谁能帮忙解释一下,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
其次,当调用那些根本就不需把返回地址保存在堆栈中的小程序时,它可以提高程序效率。
直接在从$31拿返回地址当然更快,因为不需要访问总线和内存。
arm、powerpc也都有这样一个寄存器,可以说这是RISC的一个特性吧
“其次”被2楼解释了;
“首先”是因为分支目标在寄存器里就不需要访存了。
这样理解第一点:
RISC 的一个原则就是只用 ld 和 st 两条指令访问内存,从而简化硬件设计。如果我们将返回地址放在堆栈中,那么函数调用 jal 和返回 jr 就都得访问内存,这就与 RISC 的原则相违背了。
这样理解第二点:
“小函数”是个不准确的翻译,原意应当是“叶函数”,也就是不调用其他函数的函数。因为这样的函数不调用其他函数,也就没有必要保存 $31,从而比把返回地址放在堆栈中的方法减少了两次内存访问。
事实上第二点中的条件不是必要的。将返回地址放在寄存器里总是能减少内存访问的,不管是不是在叶函数中。
多谢各位的回复!