首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MIPS装配中J与JAL (以及JR与JALR)的必要性

MIPS装配中J与JAL (以及JR与JALR)的必要性
EN

Stack Overflow用户
提问于 2016-12-16 09:23:25
回答 1查看 10.1K关注 0票数 3

我注册了,因为我一直在谷歌上搜索这个问题的答案,但找不到。

我想知道在MIPS中没有链接的跳转指令是不是绝对必要的?

例如,我可以想象,在不需要的时候使用"AL“版本会导致一些功率损失,但是有没有什么情况(这不是完全人为的,或者可以相对简单地编码),只有J/JR可以工作?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-16 18:37:24

将注释正式化为答案

J/JR可以用JAL/JALR模拟,因为后者执行前者的操作的超集。

正如@Jester所指出的,例程(C行话中的函数)必须小心地保留它们在$ra中的返回地址。

除非例程是叶例程(不做任何调用的例程),否则$ra必须保存在某个地方。

实际上,JAL/JALRJ/JR都可以相互实现:

  • 使用J/JR模拟JAL/JALR

原始模拟日航foo la $ra,ret_label j foo ret_label:

  • Emulate J/JR,带JAL/JALR

原始仿真j prolog: addi $sp,$sp,-4 \f25 sw $ra,($sp) -4\f25 jal foo -4\f6结尾: lw $ra,($sp) addi $sp,$sp,4.

要使其正常工作,代码必须返回到epilog。假设$ra主要保存在例程中(因此有标签的名称)。非常感谢@EOF指出了这段代码中的一个错误。

正如@Peter指出的那样,对$pc的访问使得(对人类而言)更容易模拟JAL/JALR

正如@EOF指出的,一些RISC机器实际上只有一条用于JAL/JALRJ/JR的指令,因为它们天生就是纠缠的。

考虑到跳转和调用在典型程序中经常发生,对于任何成功的ISA来说,能够轻松地实现(并快速执行它们)是必需的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41175942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档